当前位置:  开发笔记 > 编程语言 > 正文

即使确认失败,ASP.NET MVC Ajax也会执行OnComplete

如何解决《即使确认失败,ASP.NETMVCAjax也会执行OnComplete》经验,为你挑选了1个好方法。

我有一个Ajax表单,允许我使用OnComplete AjaxOption从表中动态删除行.这很好用.

问题是,即使我在确认对话框中点击"取消",它仍然执行OnComplete javascript.因此表单不会发布,但它看起来像是对用户做的(行从表中删除).

有任何想法吗?源代码如下:

OnComplete JS:

 function fadeDel(id) {
    $("#product" + id).fadeOut(500);
  }

表格代码:

<% using (Ajax.BeginForm("DeleteProduct", "Commerce", new { id = product.Id }, 
    new AjaxOptions 
    { 
      OnSuccess = "fadeDel(" + product.Id + ")", 
      Confirm = "Are you sure you want to delete" + product.Title 
    }, new { id = "frm" + product.Id }))
  { %>
    <%= Html.SubmitImage("Delete", Url.Content("~/content/images/12-em-cross.png"))%>
<%} %>

Jon Galloway.. 7

OnSuccess参数接受一个字符串,该字符串给出要调用的函数的名称,而不是实际的函数调用.所以你可以传递"fadeDel",但不能传递"fadeDel(5)".当你传给它一个Javascript调用时,它会立即对它进行评估,因此当你点击提交时它就会执行fadeDel(5),甚至在进行AJAX调用之前.您可以通过使用Firebug或IE测试工具进行调试来验证这一点.

如果你想用OnSuccess方法处理它,它需要是一个不带任何参数的方法.一种方法是从"this"中获取产品ID,这将是提交表单.您可以从表单ID解析它,或者只是将其包含在表单的Title或Name属性中:

<% using (Ajax.BeginForm("DeleteProduct", "Commerce", new { id = product.Id }, 
new AjaxOptions 
{ 
  OnSuccess = "fadeDel", 
  Confirm = "Are you sure you want to delete" + product.Title 
}, new { id = "frm" + product.Id, name = product.Id }))
{ %>
  
<%} %>

然后你可以更新fadeDel从'this'中提取值:

function fadeDel() {
    var id = this.name;
    $("#product" + id).fadeOut(500);
}

还有其他方法可以解决这个问题 - 例如jQuery.ajax()调用 - 但是无参数的OnSuccess调用应该可以正常工作.



1> Jon Galloway..:

OnSuccess参数接受一个字符串,该字符串给出要调用的函数的名称,而不是实际的函数调用.所以你可以传递"fadeDel",但不能传递"fadeDel(5)".当你传给它一个Javascript调用时,它会立即对它进行评估,因此当你点击提交时它就会执行fadeDel(5),甚至在进行AJAX调用之前.您可以通过使用Firebug或IE测试工具进行调试来验证这一点.

如果你想用OnSuccess方法处理它,它需要是一个不带任何参数的方法.一种方法是从"this"中获取产品ID,这将是提交表单.您可以从表单ID解析它,或者只是将其包含在表单的Title或Name属性中:

<% using (Ajax.BeginForm("DeleteProduct", "Commerce", new { id = product.Id }, 
new AjaxOptions 
{ 
  OnSuccess = "fadeDel", 
  Confirm = "Are you sure you want to delete" + product.Title 
}, new { id = "frm" + product.Id, name = product.Id }))
{ %>
  
<%} %>

然后你可以更新fadeDel从'this'中提取值:

function fadeDel() {
    var id = this.name;
    $("#product" + id).fadeOut(500);
}

还有其他方法可以解决这个问题 - 例如jQuery.ajax()调用 - 但是无参数的OnSuccess调用应该可以正常工作.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有