Asp.net-Mvc-3

Html.RenderPartial 和 Ajax.BeginForm -> 送出被呼叫兩次

  • February 23, 2013

我有以下索引視圖:

@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參考移動到您的索引視圖中。

引用自:https://stackoverflow.com/questions/15041540