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

标签 jquery asp.net-mvc ajax

我有一个 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"))%>
<%} %>

最佳答案

OnSuccess 参数采用一个字符串,该字符串给出要调用的函数的名称,而不是实际的函数调用。所以你可以传递“fadeDel”,但不能传递“fadeDel(5)”。当您向它传递 Javascript 调用时,它会立即对其进行评估,因此当您单击“提交”时,甚至在进行 AJAX 调用之前,它就会立即执行 fadeDel(5)。您可以通过使用 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 }))
{ %>
  <input type="submit" name="Delete" />
<%} %>

然后您可以更新 fadeDel 以从“this”中提取值:

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

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

关于jquery - 即使确认失败,ASP.NET MVC Ajax Post 也会执行 OnComplete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2067373/

相关文章:

c# - ASP.NET MVC : Why Range Data Annotation is not working on checkbox in client side?

asp.net-mvc - Umbraco 6.1.1 SurfaceController 基本问题

php - 无法使用 ajax 将表单数据发布到 Controller 操作 (laravel)

javascript - jstree - 阻止单个扩展节点折叠

Javascript:检查用户输入的文本是否为 "white-space language"

jquery - 从一个 JQuery 调用另一个 JQuery

javascript - jQuery:通过ajax将pdf发送到服务器

javascript - 禁用文档上的制表符但启用输入制表符?

c# - 有没有一种方法可以只将一个整数传递给我的 View 而无需在 mvc 中创建模型

jQuery:在 Ajax 内容上应用 CSS