【问题标题】:unwanted multiple ajax request to an action in asp.net mvc对 asp.net mvc 中的操作的不需要的多个 ajax 请求
【发布时间】:2012-03-30 16:31:08
【问题描述】:

我正在开发一个 asp.net mvc 应用程序并在我的页面上有 ajax 调用。这是我通过 ajax 调用页面加载的表单:

表单位于局部视图中

<div id="CreateCultureArea">
 <% 
        using (Ajax.BeginForm("CreateCulture", "Admin", new AjaxOptions() { OnSuccess = "handleCreateCulture" }))
        { %>
.....

<% } %>
</div>

代码更新

以下脚本位于视图中:

<a href="#" class="CreateCulture" id="">Create Culture</a>

<script type="text/javascript">

        $('.CreateCulture').live('click', function (e) {
            e.preventDefault();
            var idval = this.id;
            $.ajax({
                url: "/Admin/CreateCulture",
                dataType: 'html',
                data: { id: idval },
                success: function (mydata) {

                    $("#CultureContentArea").empty();
                    $("#CultureContentArea").empty().hide().append(mydata).fadeIn(2000);

                    $("form").removeData("validator");
                    $("form").removeData("unobtrusiveValidation");
                    $.validator.unobtrusive.parse("form");

                },
                type: "GET"
            });
            return false;
        })
    </script>

当用户单击带有 CreateCulture 类的链接时,表单会加载到页面。但是当我在 firebug 中看到请求时,它会多次调用该操作。我在stackoverflow.com上阅读了类似我的帖子,其中大多数建议删除页面中重复的“jquery.unobtrusive-ajax.min.js” calss,但是当我看到输出页面时,我只在“jquery.unobtrusive”的链接上看到-ajax.min.js" 脚本。

【问题讨论】:

    标签: asp.net-mvc unobtrusive-javascript


    【解决方案1】:

    问题在于@Ajax.BeginForm 发出一个具有data-ajax="true" 属性的表单。在不显眼的 AJAX 脚本中(请参阅非缩小版本并查找对 asyncRequest 的调用)。因此,通过自己调用$.ajax,您正在重复@Ajax.BeginForm 的工作。只需拨打$.ajax 的电话,您就会看到您的操作只被调用一次。

    如果您需要在 AJAX 调用完成后采取措施,请将调用中 AjaxOptionsOnComplete 属性设置为 Ajax.BeginForm

    【讨论】:

    • 很抱歉,但我无法理解“只需拨打 $.ajax 的电话,您就会看到您的操作只被调用一次”,您能详细说明一下吗?
    • 在您发布的示例代码中,您在.CreateCulture 的点击处理程序中调用了$.ajax。它由不显眼的 AJAX 调用一次,然后由您的代码再次调用。从您的代码中删除对$.ajax 的调用。事实上,您可以删除上面列出的&lt;script&gt; 标签中的所有内容。
    • 如果需要在AJAX调用完成后采取行动,设置AjaxOptionsOnComplete属性。
    • 我编辑了代码。事实是 ajax 形式处于局部视图中,与 CreateCulture 类的链接处于其他视图中。当用户点击链接时,部分视图加载到其他视图。
    • 在完成 ajax 调用后采取行动没有任何问题。我可以向用户显示适当的消息。代码更新
    【解决方案2】:

    问题是我将一些脚本放在部分视图中,并且每次它都通过加载它来复制。所以我把脚本都放在页面上,问题就解决了。

    【讨论】:

      【解决方案3】:

      确保页面中没有多个 .js 引用

      <script src='/Scripts/jquery.unobtrusive-ajax.min.js'></script>
      <script src="/Scripts/jquery.validate.min.js"></script>
      <script src="/Scripts/jquery.validate.unobtrusive.min.js"></script>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        • 2016-12-23
        • 1970-01-01
        • 1970-01-01
        • 2010-10-30
        • 2018-05-23
        • 2012-11-17
        相关资源
        最近更新 更多