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