代码之家  ›  专栏  ›  技术社区  ›  Martin at Mennt

从ASP MVC 3预览版更新到Beta版后提交了两次表单

  •  16
  • Martin at Mennt  · 技术社区  · 16 年前

    @using(Ajax.BeginForm("New", new AjaxOptions() {OnSuccess = "onAjaxSuccess", OnFailure = "onAjaxFailure", OnBegin = "onAjaxBegin", HttpMethod = "Post"})) {}
    
    <form action="/Order/New" data-ajax="true" data-ajax-begin="onAjaxBegin" data-ajax-failure="onAjaxFailure" data-ajax-method="Post" data-ajax-success="onAjaxSuccess" method="post"></form>
    

    我放了一个 alert 在我的职责范围内 onAjaxBegin

    还有人看到这种行为吗?升级后我没有更改代码中的任何内容,而且在升级前它工作得很好。

    13 回复  |  直到 16 年前
        1
  •  33
  •   NoNaMe    13 年前

    我也有同样的问题,我找到了解决办法:我把 jquery.unobtrusive-ajax.min.js -Script 两次:-)

        2
  •  14
  •   Darin Dimitrov    16 年前

    看看生成的HTML。 In ASP.NET MVC 3 Beta 现在有了对基于jquery的ajax的新支持,所有ajax助手都使用jquery。可能是由于MS Ajax留下了一些东西,导致了双重调用。确保从页面中删除MSAjax脚本的所有包含内容。为什么还要使用 Ajax.BeginForm 当你可以简单地使用 Html.BeginForm

        3
  •  7
  •   NoNaMe    13 年前

    复制品 jquery.unobtrusive-ajax.min.js 如果控制器返回 View() 而不是 PartialView()

        4
  •  3
  •   Erik Schierboom    13 年前

    我在使用 AJAX.BeginForm 使用动态加载的调用 $.load() 我通过去掉 在加载的窗体上。那是钥匙!

        5
  •  2
  •   stealthyninja michkra    15 年前

    每次使用前都要给一个小提示 .live() die() :)
    这将杀死附加到此事件的所有java脚本,并创建一个新脚本。

    例子:

    $(function() {
        $('#MyInfoForm').die();
        $("#MyInfoForm").live('submit', function(e) {
            //some code
            e.preventDefault();
        });
    });
    
        6
  •  2
  •   Dion V.    11 年前

    仅供使用ASP.NET MVC的用户参考; "~/Scripts/jquery.unobtrusive*" 做 包括 "~/Scripts/jquery.unobtrusive-ajax.js" .

    BundleConfig 看起来像这样;

    bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js",
                        "~/Scripts/jquery.unobtrusive-ajax.js"));
    
    bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                        "~/Scripts/jquery.unobtrusive*",
                        "~/Scripts/jquery.validate*"));
    

    “~/Scripts/jquery.unobtrusive*” 或 “~/Scripts/jquery.unobtrusive ajax.js” 会解决问题的。

    只是因为容易被忽视 搜索时 unobtrusive-ajax .

        7
  •  1
  •   Hans Olsson    14 年前

    bind 而不是 live 在jquery.unobtrusive ajax.min.js~~~中,这非常重要。因为 居住 事件将每次调用以前的事件,但是 绑定 只调用当前事件。

        8
  •  1
  •   rns    11 年前

    jquery.unobtrusive-ajax.js 外部部分观点解决了我的问题。

        9
  •  0
  •   NoNaMe    13 年前

    我也有同样的问题。我在母版页中有一个登录部分视图,其中包括 jquery.unobtrusive-ajax.min.js

        10
  •  0
  •   NoNaMe    13 年前

    我也有这个问题,原因完全不同。我把剧本中提到的 jquery.unobtrusive-ajax.min.js

        11
  •  0
  •   Community Mohan Dere    9 年前

    这可能有助于有人有一个类似于我的情况:

    第一次打开弹出窗口时,表单提交将导致对控制器(服务器端)代码的单个调用。到现在为止,一直都还不错。但是,对于第二次打开窗口(不关闭容器页),表单提交将调用控制器2次。随后,每次重新打开弹出窗口时,都会导致额外加载jquery.unobtrusive-ajax.js代码,而这又会导致在每次提交表单时对控制器进行额外的不需要的调用。

    client side validation with dynamically added field 哪些链接指向此博客文章: http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/

        12
  •  0
  •   Lucas Roselli    12 年前

    我找到了解决方案,只需删除所有jquery.unobtrusive-ajax.js引用,因为您正在使用ajax.BeginForm,它将正常使用ajax。

    所以它不必禁用ajax。

        13
  •  0
  •   monkeySeeMonkeyDo    7 年前

    这是旧的,但我发现了一些很愚蠢的东西,很容易被忽视。

    我们的表格还附有以下内容:

    $(document).ready(function () {
        $('#submit-button').on('click', function (e) {
            ....
        }
    });
    

    很明显.NET代码自己处理这个问题。