Подтвердить что ты не робот

Html.RenderPartial и Ajax.BeginForm → Submit вызывается дважды

У меня есть следующий индексный вид:

@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 отображается мой Create View:

<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 в моем контроллере. К сожалению, форма всегда вызывает метод дважды.: (

Может кто-нибудь помочь мне?

4b9b3361

Ответ 1

Не включайте скрипты внутри частичных представлений! Они должны следовать вашим "основным" представлениям или вашим _layout.cshtml.

Ваша проблема в том, что вы дважды включили jquery.unobtrusive-ajax.min.js на свою страницу. Однажды в вашем Create частичном и некогда где-то в другом месте. Потому что если вы включите этот script несколько раз, он будет подписаться на событие отправки несколько раз, поэтому вы получите несколько отправки одним нажатием.

Поэтому убедитесь, что вы включили script только один раз на странице. Поэтому переместите ссылку jquery.unobtrusive-ajax.min.js в свой индексный указатель.