【问题标题】:Html.RenderPartial and Ajax.BeginForm -> Submit is called twiceHtml.RenderPartial 和 Ajax.BeginForm -> 提交被调用两次
【发布时间】:2013-02-09 02:17:42
【问题描述】:

我有以下索引视图:

@model BoringStore.ViewModels.ProductIndexViewModel
@{
    ViewBag.Title = "Index";
}

<h2>Produkte</h2>

<div id='addProduct'>
    @{ Html.RenderPartial("Create", new BoringStore.Models.Product()); }
</div>

<div id='productList'>
    @{ Html.RenderPartial("ProductListControl", Model.Products); }
</div>

“productList”只是所有产品的列表。

addProduct 呈现我的创建视图:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<div id="dialog-confirm" title="Produkt hinzufügen" style="display:none">
@using (Ajax.BeginForm("Index_AddItem", new AjaxOptions { UpdateTargetId = "productList" }))
{ 
    @Html.Raw(DateTime.Now.ToString());

    <div>
        @Html.LabelFor(model => model.Name)
        @Html.EditorFor(model => model.Name)
    </div>
    <br />
    <div>
        @Html.LabelFor(model => model.Price)
        @Html.EditorFor(model => model.Price)
    </div>
    <br /><br />
    <div>
        <input type="submit" value="Produkt hinzufügen" />
    </div>
}

提交表单时,我的控制器中的 Index_AddItem 方法被调用。不幸的是,表单总是调用该方法两次。 :(

谁能帮帮我?

【问题讨论】:

    标签: asp.net-mvc-3 razor asp.net-ajax partial-views double-submit-problem


    【解决方案1】:

    不要在局部视图中包含脚本!他们应该去你的“主要”观点或你的_layout.cshtml

    您的问题是您在页面中包含了两次jquery.unobtrusive-ajax.min.js。一次在您的Create 部分,一次在其他地方。因为如果您多次包含该脚本,它将多次订阅提交事件,因此您只需单击一次即可获得多次提交。

    因此,请确保您在页面中只包含该脚本一次。所以将jquery.unobtrusive-ajax.min.js 引用移动到您的索引视图中。

    【讨论】:

    • 如果局部视图中有 Ajax 链接怎么办? jquery.unobtrusive-ajax 的第一个包含不注册链接。
    • 我的 BundleConfig 中有两次 jquery-{version}.js - 一次在我的 jquery 包下,一次在 ajax 包下。这给我带来了同样的问题。所以谢谢你让我走上正轨!
    • 我遇到了类似的问题,我想我可能会包含两次我包含 jquery-1.10.2、jquery.mask.min.js、jquery-ui-1.10.3.custom 的内容。 min.js、jquery.validate 和 jquery.unobtrusive-ajax 这些组合会导致我的表单提交两次吗?
    • 谢谢,它通过在部分视图中删除“jquery.unobtrusive-ajax.min.js”解决了我的问题,多次调用ajax库时可能会导致问题。
    • 我的问题是 _Layout.cshtml 被包含在我的部分视图中,并且“jquery.unobtrusive-ajax.min.js”被包含了两次。设置 @Layout = "" 解决了我的问题。
    【解决方案2】:

    确保布局中没有重复的 jquery.unobtrusive-ajax.min.js 文件 如上所述,您可以使用浏览器检查器进行检查

    我遇到的另一个可能导致此错误的问题是在 ajax 请求中使用 jquery 来休息表单,如下所示

    $("form").trigger("reset"); //just remove this line
    

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2016-03-06
      • 2023-04-10
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多