Html.RenderPartial和Ajax.BeginForm - >提交被调用两次

时间:2013-02-23 14:24:26

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

我有以下索引视图:

@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方法。不幸的是,表单总是调用该方法两次。 :(

有人能帮助我吗?

2 个答案:

答案 0 :(得分:38)

不要在部分视图中包含脚本!他们应该转到您的“主要”观点或您的_layout.cshtml

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

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

答案 1 :(得分:0)

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

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

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