Javascript 如何在MVC中删除记录而不使用视图?

Javascript 如何在MVC中删除记录而不使用视图?,javascript,c#,asp.net-mvc,Javascript,C#,Asp.net Mvc,通常,我会在索引视图中放置以下内容: @Html.ActionLink(" ", "Delete", new { id = item.UserId }, new { onclick = "return confirm('Are you sure you want to delete this user?');", @class = "delete-button" }) 这允许我删除表中的内联项,而无需导航到我的列表。我所需要做的就是通过javascript确认来确认删除 我的行动如下: pub

通常,我会在索引视图中放置以下内容:

@Html.ActionLink(" ", "Delete", new { id = item.UserId }, new { onclick = "return confirm('Are you sure you want to delete this user?');", @class = "delete-button" })
这允许我删除表中的内联项,而无需导航到我的列表。我所需要做的就是通过javascript确认来确认删除

我的行动如下:

public ActionResult Delete(int id)
{
    User user = db.Users.Find(id);
    if (user == null)
    {
        return HttpNotFound();
    }
    else
    {
        db.Users.Remove(user);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
}
private async Task<ActionResult> Delete(int id)
{
    string url = String.Format("api/user/{0}", id);

    using (HttpClient client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://localhost:49474/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = await client.DeleteAsync(url);

        return RedirectToAction("Index");
    }
}
我现在也在尝试同样的事情,但是有一个到我的web服务的链接,它将处理数据库上的删除

唯一的区别是控制器现在看起来像这样:

public ActionResult Delete(int id)
{
    User user = db.Users.Find(id);
    if (user == null)
    {
        return HttpNotFound();
    }
    else
    {
        db.Users.Remove(user);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
}
private async Task<ActionResult> Delete(int id)
{
    string url = String.Format("api/user/{0}", id);

    using (HttpClient client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://localhost:49474/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = await client.DeleteAsync(url);

        return RedirectToAction("Index");
    }
}
这给了我javascript确认,但数据库上没有发生删除,我得到一个错误屏幕,显示不存在任何视图


调试后,我发现上面的函数甚至没有被请求。我觉得我需要在控制器中添加一些东西,但我不确定是什么。

只需将控制器的操作更改为公共:

public async Task<ActionResult> Delete(int id)
{
    string url = String.Format("api/user/{0}", id);

    using (HttpClient client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://localhost:49474/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = await client.DeleteAsync(url);

        return RedirectToAction("Index");
    }
}
公共异步任务删除(int-id)
{
stringurl=string.Format(“api/user/{0}”,id);
使用(HttpClient=new HttpClient())
{
client.BaseAddress=新Uri(“http://localhost:49474/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpResponseMessage response=wait client.DeleteAsync(url);
返回操作(“索引”);
}
}

private async Task Delete(int-id)。。。控制器的操作应该是公共的。执行此操作时,您如何不离开页面:
return RedirectToAction(“Index”)另一点,如果您使用的是JS,则返回RedirectToAction(“Index”);行不通。@ThiagoCustodio如果这是问题所在,我会把头撞到那边的墙上->|@ThiagoCustodio我刚刚碰到了一堵墙,就像我说的那样,因为问题似乎在于我已经声明删除函数为私有函数。。。谢谢,请回答,你会得到虚假的互联网积分