13

我有以下索引視圖: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-方法被調用。不幸的是,表單總是調用兩次方法。 :(

有人能幫助我嗎?

回答

33

不包括你的部分看法裏面的腳本!他們應該去你的「主」視圖或您的_layout.cshtml

你的問題是,你已經包括在你的頁面的jquery.unobtrusive-ajax.min.js的兩倍。一旦你Create部分,一旦別的地方。因爲如果包括腳本多次將多次認購上的提交事件,因此你會得到多一個單一的點擊提交。

所以確保你已經包含該sc只在頁面中撕裂一次。因此,將jquery.unobtrusive-ajax.min.js引用移動到您的索引視圖中。

+0

你是對的 - 我已經包括它兩次。 :( – mosquito87 2013-02-23 14:46:19

+3

如果你在部分視圖中有Ajax鏈接怎麼辦?jquery.unobstrusive-ajax的第一個包含沒有註冊鏈接。 – allenylzhou 2014-03-22 21:48:06

+0

我在我的BundleConfig中有兩次jquery- {version} .js - 一次在我的下面jquery捆綁和一次下ajax捆綁。這對我造成了同樣的問題。所以感謝把我放在正確的軌道! – Arwin 2015-02-03 20:59:43