18

我有以下索引视图:

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

有人可以帮我吗?

4

2 回答 2

49

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

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

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

于 2013-02-23T14:34:29.910 回答
0

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

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

$("form").trigger("reset"); //just remove this line
于 2020-07-20T11:16:26.760 回答