Ajax.BeginForm强制完全回发

时间:2012-06-11 07:48:52

标签: javascript asp.net-mvc ajax.beginform

如何强制Ajax.BeginForm(MVC3,不引人注意)进行完整的回发?

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

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

PS。如果你有兴趣,我需要这个文件上传。如果没有上传文件 - ajax很好。如果正在上传文件 - 请让它进行完整的回发。

更新

查看" jquery.unobtrusive-ajax.js"源代码我看到了这个:

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

所以我提出了这个并且它有效:

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

但这似乎有点" hacky",任何"合法"从表单中清除所有onsubmit事件的方法?我想现在更新的问题是:如何清除" live"带有" die"的事件处理程序使用不同选择器的语句?

1 个答案:

答案 0 :(得分:1)

如果您可以修改不显眼的库..您可以在提交事件处理程序中检查表单是否包含任何文件,如果是,则通过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())
      });
    }
  });