Asp.net-Mvc-3
Html.RenderPartial 和 Ajax.BeginForm -> 送出被呼叫兩次
我有以下索引視圖:
@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 方法被呼叫。不幸的是,表單總是呼叫該方法兩次。:(
有人可以幫我嗎?
不要在局部視圖中包含腳本!他們應該去你的“主要”觀點或你的
_layout.cshtml.您的問題是您
jquery.unobtrusive-ajax.min.js在頁面中包含了兩次。一次在你的Create局部,一次在其他地方。因為如果您多次包含該腳本,它將多次訂閱送出事件,因此您只需點擊一次即可獲得多次送出。因此,請確保您在頁面中只包含該腳本一次。所以將
jquery.unobtrusive-ajax.min.js參考移動到您的索引視圖中。