Ajax.BeginForm 强制完全回发

Ajax.BeginForm force full postback

本文关键字:BeginForm Ajax      更新时间:2023-09-26

如何强制Ajax.BeginForm(MVC3,不显眼)执行完整的回发?

在MVC2中,我刚刚清除了"点击"和"提交"处理程序。如何在 MVC3 中执行此操作?

//does not work in MVC 3 with unobtrusive ajax :((
$('#myForm').unbind('click');
$('#myForm').unbind('submit');

附言。如果您有兴趣,我需要这个来上传文件。如果没有上传任何文件 - ajax 很好。如果正在上传文件,请让它执行完整回发。

更新:

在查看了"jquery.unobtrusive-ajax.js"源代码后,我看到了以下内容:

$("form[data-ajax=true]").live("submit", blahblah);

所以我想出了这个,它有效:

$("form[data-ajax=true]").die("submit");

但这似乎有点"黑客",有什么"合法"的方法可以从表单中清除所有提交事件吗?我想更新的问题是现在:如何使用使用不同选择器的"die"语句清除"实时"事件处理程序?

如果你可以修改不显眼的库......你可以在提交事件处理程序中检查表单是否包含任何文件,如果是,则通过AJAX执行完整的POST。

$("form[data-ajax=true]").live("submit", function (evt) {
    var clickInfo = $(this).data(data_click) || [];
    evt.preventDefault();
    if (!validate(this)) {
      return;
    }
    if ($("input[type=file]", this).val()) {
      this.submit();
    }
    else {
      asyncRequest(this, {
        url: this.action,
        type: this.method || "GET",
        data: clickInfo.concat($(this).serializeArray())
      });
    }
  });