13

Ich habe folgende Indexansicht genannt:Html.RenderPartial und Ajax.BeginForm -> Submit zweimal

@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> 

Die „product“ ist nur eine Liste aller Produkte.

Die addProduct machen meine Ansicht erstellen:

<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> 
} 

Wenn Sie das Formular absenden, die Index_AddItem-Methode in meinem Controller genannt wird. Leider ruft das Formular die Methode immer zweimal auf. :(

Kann mir jemand helfen?

Antwort

33

keine Skripte in Ihrem Teilansichten sind Sie! Sie sollten die Ihre „Haupt“ Ansichten oder Ihre _layout.cshtml gehen.

Ihr Problem ist, dass Sie enthalten haben Die jquery.unobtrusive-ajax.min.js zweimal in Ihrer Seite.Only in Ihrem Create teilweise und einmal woanders.Wenn Sie dieses Skript mehrmals hinzufügen, wird es auf dem Submit-Ereignis mehrmals abonnieren, so dass Sie mehrere senden mit einem einzigen Klick erhalten werden ..

So Stellen Sie sicher, dass Sie diese sc enthalten ript nur einmal auf einer Seite. Also verschieben Sie die jquery.unobtrusive-ajax.min.js Referenz in Ihre Indexansicht.

+0

Sie haben recht- Ich hatte es zweimal aufgenommen. :( – mosquito87

+3

Was ist, wenn Sie einen Ajax Link in einer Teilansicht haben? Die erste Aufnahme von jquery.unobstrusive-ajax registriert den Link nicht. – allenylzhou

+0

Ich hatte die jquery- {version} .js zweimal in meiner BundleConfig - einmal unter meiner jquery bundle und einmal unter ajax bundle.Dies verursachte das gleiche Problem für mich.So danke, dass Sie mich auf den richtigen Weg! – Arwin

Verwandte Themen