Ajax.BeginForm强制完全回发(Ajax.BeginForm force full pos

2019-09-18 00:24发布

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

在MVC2我只是清除了“点击”和“的onsubmit”处理程序。 如何在MVC3做到这一点?

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

PS。 如果你有兴趣,我需要这个文件上传。 如果没有文件被上传 - 阿贾克斯是好的。 如果一个文件被上传 - 让它做一个完整的回发。

更新:

看着“jquery.unobtrusive-ajax.js”源代码后,我看到了这一点:

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

所以,我想出了这一点,它的工作原理:

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

但是,这似乎有点“哈克”,任何“合法”的方式来清除表单中所有的onsubmit事件? 我想更新的问题现在是: 如何清除一个“活”的事件处理程序与使用不同的选择是“死”的说法?

Answer 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())
      });
    }
  });


文章来源: Ajax.BeginForm force full postback