【问题标题】:Ajax.BeginForm force full postbackAjax.BeginForm 强制完全回发
【发布时间】:2012-06-11 07:48:52
【问题描述】:

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

在 MVC2 中,我刚刚清除了“onclick”和“onsubmit”处理程序。如何在 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");

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

【问题讨论】:

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


    【解决方案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())
          });
        }
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-18
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2012-01-02
      • 2014-12-16
      相关资源
      最近更新 更多