javascript - 如何在不使用 View 的情况下删除 MVC 中的记录?

标签 javascript c# asp.net-mvc

通常我将以下内容放在我的索引 View 中:

@Html.ActionLink(" ", "Delete", new { id = item.UserId }, new { onclick = "return confirm('Are you sure you want to delete this user?');", @class = "delete-button" })

这使我可以在不离开列表的情况下直接删除表格中的项目。我需要做的就是通过 javascript 确认确认删除。

我的 Action 是这样的:

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");
    }
}

我现在正在尝试同样的事情,但要链接到我的 Web 服务,该服务将处理数据库上的删除。

唯一的区别在于现在看起来像这样的 Controller :

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");
    }
}

为了完整起见,下面是删除记录的网络服务代码:

public HttpResponseMessage Delete(int id)
{
    try
    {
        var existing = db.Users.Find(id);

        if (existing != null)
        {
            db.Users.Remove(existing);
            db.SaveChanges();

            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);

            return response;
        }
        else
        {
            throw new ArgumentNullException("Object ID not found");
        }

    }
    catch (Exception ex)
    {
        return ReportError(ex, "DELETE USER");
    }
}

这给了我 javascript 确认,但是数据库上没有删除,我得到一个错误屏幕,显示不存在 View 。

经过调试,发现连上面的函数都没有请求。我觉得我需要在 Controller 中添加一些东西,但我不确定是什么。

最佳答案

只需将 Controller 的操作更改为公开即可:

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");
    }
}

关于javascript - 如何在不使用 View 的情况下删除 MVC 中的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31615141/

相关文章:

c# - nHibernate Distinct 和分页的问题

c# - 如何比较Azure资源配置

c# - list 资源 (Assembly.GetManifestResourceStream) 的资源名称是什么?

asp.net-mvc - 带有 javascript 的 Mvc ActionLink

javascript - 为什么将空数组作为参数传递给 .reduce?

javascript超大负指数到十进制转换

javascript - 将类添加到 html 根目录

c# - 在 View 模型和 View 之间使用 MVVM 的 Wpf 数据上下文绑定(bind)

javascript - Jquery点击事件没有被触发

jquery - 使用 jQuery ajax post 覆盖表单提交事件