13

Ho la seguente vista indice:Html.RenderPartial e Ajax.BeginForm -> Invia viene chiamato due volte

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

La "Lista prodotti" è solo un elenco di tutti i prodotti.

L'addProduct rende la mia Crea Vista:

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

Quando l'invio del modulo, l'Index_AddItem metodo nel mio controller si chiama. Sfortunatamente il modulo chiama sempre il metodo due volte. :(

Qualcuno può darmi una mano?

risposta

33

Non includere script all'interno del vostro vista parziale! Dovrebbero andare i vostri "principali" punti di vista o la vostra _layout.cshtml.

Il tuo problema è che avete incluso il due volte nella tua pagina.Una volta nel tuo Create parziale e una volta altrove.Perché se si include quello script più volte si iscriverà sull'evento di invio più volte in modo da ottenere più invio con un solo clic

Quindi assicurati di aver incluso quella sc strappare solo una volta in una pagina. Quindi sposta il riferimento jquery.unobtrusive-ajax.min.js nella vista indice.

+0

Hai ragione, l'ho inserito due volte. :( – mosquito87

+3

Cosa succede se si dispone di un collegamento Ajax all'interno di una vista parziale? La prima inclusione di jquery.unobstrusive-ajax non registra il collegamento. – allenylzhou

+0

Ho avuto il jquery- {versione} .js due volte nel mio BundleConfig - una volta sotto il mio jquery bundle e una volta sotto ajax bundle.Questo mi ha causato lo stesso problema.Ma grazie per avermi messo sulla giusta via! – Arwin