我有以下索引视图:
@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方法。不幸的是,表单总是调用该方法两次。 :(
有人能帮助我吗?
答案 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