【问题标题】:Delete record by using ajax from database EntityFramework使用数据库EntityFramework中的ajax删除记录
【发布时间】:2018-06-20 18:30:48
【问题描述】:

我是初学者,尝试在 MVC 实体框架中使用 JavaScriptAjaxJson 从数据库中删除记录。但是我的删除按钮效果不好。

在控制器类中,我的操作代码是

public ActionResult Delete(int id) {
            using (StudentContext db = new StudentContext()) {
                Student std = db.Student.Where(x => x.Id == id).FirstOrDefault<Student>();
                db.Student.Remove(std);
                db.SaveChanges();
              }
              return Json(true, JsonRequestBehavior.AllowGet);
        }

我的 JavaScript 代码是

<button id='deleteRecord'>delete</button>

$("#deleteRecord").click(function () {
                var StudentId = $(this).val();
                var stdId = parseInt(StudentId);
                $.ajax({
                    url: "/AjaxStudent/Delete",
                    type: 'Delete',
                    data: {
                        StudentId: stdId
                    }
                }).done(function () {
                    alert("Deleted")
                });
            });

        }).error(function () {
            alert("Failed")
        });

如果有人帮助我,我将非常感谢。

【问题讨论】:

  • 您是否收到任何错误,或者您尝试删除时是否出现不一致?是否有任何您没有考虑的限制或相关记录? IE。您是否要删除正在其他表中使用的学生 ID?
  • @fdsafdsafdsafdsafs 哦,是的,我收到了这个错误 System.ArgumentException: 参数字典包含一个 null 条目,用于方法'的不可空类型'System.Int32'的参数'id' 'AjaxStudentCall.Controllers.AjaxStudentController' 中的 System.Web.Mvc.ActionResult Delete(Int32)'。可选参数必须是引用类型、可空类型或声明为可选参数。参数名称:参数和我的学生ID在一个表中。

标签: javascript jquery asp.net-mvc-3 entity-framework-6 asp.net-ajax


【解决方案1】:

您需要在 jquery 数据标签中添加您的模型 ID:

<button id='deleteRecord' data-model-id="@model.Id">delete</button>

然后在javascript代码中:

$("#deleteRecord").click(function () {
                var StudentId = $(this).data("model-id");
                var url = "/AjaxStudent/Delete/" + StudentId;
                $.ajax({
                    url: url,
                    type: 'Delete',
                }).done(function () {
                    alert("Deleted")
                });
            });
        }).error(function () {
            alert("Failed")
        });

【讨论】:

  • 我的回答对你没有帮助?现在是什么错误?
  • 在按钮标签中,此代码 data-model-id="@model.Id" 不起作用。
  • data-model-id 应该包含您要删除的模型的 id(记录 id 或主键):例如,如果您要删除 id=7 的模型,则 data-model-id= “7”。您可以随意更改@model.id
  • 您得到的错误:“System.ArgumentException:参数字典包含不可为空类型'System.Int32'的参数'id'的空条目......”是因为删除操作在AjaxStudentController 没有收到 id 参数。
  • 看看我下面的答案。谢谢你,我在你的概念的帮助下得到了它。
【解决方案2】:

我认为错误来自您的 ajax 调用的 type 属性。您将“删除”分配给该属性,但它必须是“POST”:

 $.ajax({
          url: "@Url.Action("Delete","AjaxStudent")",
          type: "POST", // here is your problem,
          data: { StudentId: stdId },
          dataType: 'json',
          success: function() {                 
                alert("Deleted");
            },
          error: function(dat) {
                alert(data.x);
            }
        });

并且你的控制器中的动作方法必须用 [httppost] 装饰:

 [HttpPost]
 public JsonResult Delete(int StudentId) 
 {
    using (StudentContext db = new StudentContext()) 
    {
        Student std = db.Student.Where(x => x.Id == StudentId).FirstOrDefault<Student>();
        db.Student.Remove(std);
        db.SaveChanges();
      }
      return Json(true, JsonRequestBehavior.AllowGet);
  }

【讨论】:

  • 是的,我有点同意你的看法,但使用 type :"Post" ,看看我下面的答案。
【解决方案3】:

经过很长时间,我能够解决我的问题。

现在是我的 JavaScript 代码

<button class='deleteRecord' data-stid=" + students[i].Id + " >delete</button> 
$(".deleteRecord").click(function () {
                var StudentId1 = $(this).data("stid");
                debugger;
                $.ajax({
                    url: "/AjaxStudent/Delete/" + StudentId1,
                    type: "Post"
                }).done(function () {

                    getAllStudents();

                    });
                });
            });

Controller.cs

public ActionResult Delete(int id) {
            using (StudentContext db = new StudentContext()) {
                Student std = db.Student.Where(x => x.Id == id).FirstOrDefault();
                db.Student.Remove(std);
                db.SaveChanges();
            }

            return Json(true, JsonRequestBehavior.AllowGet);
        }

【讨论】:

    【解决方案4】:

    你应该尝试改变:

     $.ajax({
                    url: "/AjaxStudent/Delete",
                    type: 'Delete',
                    data: {
                        StudentId: stdId
                    }
    

    到:

     $.ajax({
                url: "/AjaxStudent/Delete",
                type: 'Delete',
                data: {
                    'id':stdId
                }
    

    【讨论】:

      猜你喜欢
      • 2018-03-16
      • 2014-11-23
      • 2010-11-18
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 2019-06-03
      相关资源
      最近更新 更多