Jquery ASP.NET MVC 5使用AJAX删除数据库中的行

Jquery ASP.NET MVC 5使用AJAX删除数据库中的行,jquery,asp.net,ajax,asp.net-mvc,Jquery,Asp.net,Ajax,Asp.net Mvc,我正在尝试使用Ajax删除表中的行,以便在尝试删除表中的一行时页面不会刷新。 这是我的代码,但目前按Delete键没有任何作用: 控制器: public ActionResult Delete(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); }

我正在尝试使用Ajax删除表中的行,以便在尝试删除表中的一行时页面不会刷新。 这是我的代码,但目前按Delete键没有任何作用:

控制器:

public ActionResult Delete(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Main main = db.Mains.Find(id);
            if (main == null)
            {
                return HttpNotFound();
            }
            return View(main);
        }
[HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            Main main = db.Mains.Find(id);
            db.Mains.Remove(main);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
观点:

<script>
$(document).ready(function () {
    $("#Delete").on("click", function () {
        var parent = $(this).parent().parent();
        $.ajax({
            type: "post",
            url: "@Url.Action("Delete","Main")",
            ajaxasync: true,
            success: function () {
                alert("success");
            },
            error: function (data) {
                alert(data.x);
            }
        });
    });
});
</script>

$(文档).ready(函数(){
$(“#删除”)。在(“单击”上,函数(){
var parent=$(this.parent().parent();
$.ajax({
类型:“post”,
url:“@url.Action”(“删除”,“主”)”,
ajaxasync:true,
成功:函数(){
警惕(“成功”);
},
错误:函数(数据){
警报(data.x);
}
});
});
});
要从表中删除的实际链接:

 <td>
      @Html.ActionLink("Edit", "Edit", new { id = item.ID }) |
      <a href="" id="Delete">Delete</a>
</td>

@ActionLink(“编辑”,“编辑”,新的{id=item.id})|
请帮帮我!Ty

如果您更改:

return View(main);

将使您在AJAX调用中获得成功

然后在浏览器中使用dubug JS检查

alert("success");
如果您更改以下内容,则称为成功:

return View(main);

将使您在AJAX调用中获得成功

然后在浏览器中使用dubug JS检查

alert("success");

在名为“成功”的情况下,您必须将您的
Id
传递给MVC操作。实际上,您并不是使用
ajax
jQuery方法的
data
选项将其作为参数传递。尝试调试MVC操作,查看
Id
参数中接收到的内容

 <script>
$(document).ready(function () {
$("#Delete").on("click", function () {
    var parent = $(this).parent().parent();
    var myId = //Get here you id
    $.ajax({
        type: "post",
        url: "@Url.Action("Delete","Main")",
        data: {id:  myId },
        ajaxasync: true,
        success: function () {
            alert("success");
        },
        error: function (data) {
            alert(data.x);
        }
    });
});
});

$(文档).ready(函数(){
$(“#删除”)。在(“单击”上,函数(){
var parent=$(this.parent().parent();
var myId=//获取您的id
$.ajax({
类型:“post”,
url:“@url.Action”(“删除”,“主”)”,
数据:{id:myId},
ajaxasync:true,
成功:函数(){
警惕(“成功”);
},
错误:函数(数据){
警报(data.x);
}
});
});
});


您可能还需要传递
RequestVerificationToken

您必须将
Id
传递给MVC操作。实际上,您并不是使用
ajax
jQuery方法的
data
选项将其作为参数传递。尝试调试MVC操作,查看
Id
参数中接收到的内容

 <script>
$(document).ready(function () {
$("#Delete").on("click", function () {
    var parent = $(this).parent().parent();
    var myId = //Get here you id
    $.ajax({
        type: "post",
        url: "@Url.Action("Delete","Main")",
        data: {id:  myId },
        ajaxasync: true,
        success: function () {
            alert("success");
        },
        error: function (data) {
            alert(data.x);
        }
    });
});
});

$(文档).ready(函数(){
$(“#删除”)。在(“单击”上,函数(){
var parent=$(this.parent().parent();
var myId=//获取您的id
$.ajax({
类型:“post”,
url:“@url.Action”(“删除”,“主”)”,
数据:{id:myId},
ajaxasync:true,
成功:函数(){
警惕(“成功”);
},
错误:函数(数据){
警报(data.x);
}
});
});
});


您可能还需要传递
RequestVerificationToken

您在AJAX方法的帖子中没有包含
Id

如果没有它,它将不会将Id发布到
DeleteConfirmed
操作方法:

$(document).delegate('#Delete', 'click', function (e) {

    e.preventDefault();

    $.ajax({
            type: "post",
            url: "@Url.Action("Delete","Main")",
            ajaxasync: true,
            data: { id : $('input#idField').val() },
            success: function () {

                alert("success");

                // Perform redirect
                window.location.replace("@Url.Action('Index', 'Main')");
            },
            error: function (data) {
                alert(data.x);
            }
        });
});
至于它在发布后不重定向,那是因为您使用AJAX请求发出请求。如果您从action方法返回一个重定向,您的页面将不会接受它,因为它是服务器端重定向

您必须检查成功消息,然后在成功时重定向。我建议如下:

[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
    Main main = db.Mains.Find(id);
    db.Mains.Remove(main);
    db.SaveChanges();
    return new HttpStatusCodeResult(System.Net.HttpStatusCode.OK);
}
要将此添加到您的
成功
(如上所示):

您的页面正在重新加载页面,因为您的链接指示它:

<a href="" id="Delete">Delete</a> // Navigate to current page

在AJAX方法的帖子中没有包含
Id

如果没有它,它将不会将Id发布到
DeleteConfirmed
操作方法:

$(document).delegate('#Delete', 'click', function (e) {

    e.preventDefault();

    $.ajax({
            type: "post",
            url: "@Url.Action("Delete","Main")",
            ajaxasync: true,
            data: { id : $('input#idField').val() },
            success: function () {

                alert("success");

                // Perform redirect
                window.location.replace("@Url.Action('Index', 'Main')");
            },
            error: function (data) {
                alert(data.x);
            }
        });
});
至于它在发布后不重定向,那是因为您使用AJAX请求发出请求。如果您从action方法返回一个重定向,您的页面将不会接受它,因为它是服务器端重定向

您必须检查成功消息,然后在成功时重定向。我建议如下:

[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
    Main main = db.Mains.Find(id);
    db.Mains.Remove(main);
    db.SaveChanges();
    return new HttpStatusCodeResult(System.Net.HttpStatusCode.OK);
}
要将此添加到您的
成功
(如上所示):

您的页面正在重新加载页面,因为您的链接指示它:

<a href="" id="Delete">Delete</a> // Navigate to current page

删除什么都不做太模糊了。您在调试方面做了哪些尝试?你走了多远?您的onclick是否被触发,是否达到mvc操作。。。请至少添加您尝试过的基本调试信息。您能否澄清是删除不起作用(在数据库中该行未被删除)还是页面加载不起作用。。。或者两者都有?在数据库中存在id后,是否要回发
deleteComfixed
操作?Delete不做任何事情是非常模糊的。您在调试方面做了哪些尝试?你走了多远?您的onclick是否被触发,是否达到mvc操作。。。请至少添加您尝试过的基本调试信息。您能否澄清是删除不起作用(在数据库中该行未被删除)还是页面加载不起作用。。。或者两者都有?在数据库中存在id后,您希望在
deleteConfixed
操作上回发吗?我想您的意思是更改
返回重定向到操作(“索引”):)我想你的意思是更改
返回重定向到操作(“索引”):)找不到StatusCodeResult。。。我应该让VS生成它吗?这是因为您已将返回值从
ActionResult
更改为
bool
?好的,让我检查一下。我刚刚打开VS来看看:PSorry,我记错了,它是
HttpStatusCodeResult
。请查看更新:)让我们查看。它找不到StatusCodeResult。。。我应该让VS生成它吗?这是因为您已将返回值从
ActionResult
更改为
bool
?好的,让我检查一下。我刚刚打开VS来看看:PSorry,我记错了,它是
HttpStatusCodeResult
。请看更新:)让我们看看。