13

Mam następujący widok indeksu:Html.RenderPartial i Ajax.BeginForm -> Prześlij nazywa dwukrotnie

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

W „productList” jest tylko lista wszystkich produktów.

addProduct czyni moje Utwórz widok:

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

Składając formularz, Index_AddItem-metoda w moim kontroler jest tzw. Niestety, formularz zawsze wywołuje metodę dwukrotnie. :(

Czy ktoś może mi pomóc?

Odpowiedz

33

Nie zawierają skrypty wewnątrz częściowym widokiem! Powinny one iść na swoje „main” poglądy i swoje _layout.cshtml.

Twoim problemem jest to, że masz włączony jquery.unobtrusive-ajax.min.js dwa razy na twojej stronie, raz w twojej części Create częściowa i raz gdzieś indziej. Ponieważ jeśli dodasz ten skrypt kilka razy, będzie on wielokrotnie zapisywał się w zdarzeniu przesyłania, dzięki czemu za jednym kliknięciem otrzymasz wiele zgłoszeń:

upewnij się, że masz to sc sc ript tylko raz na stronie. Dlatego przenieś odwołanie jquery.unobtrusive-ajax.min.js do widoku indeksu.

+0

Masz rację - dodałem to dwa razy. :( – mosquito87

+3

Co zrobić, jeśli masz łącze Ajax wewnątrz częściowego widoku? Pierwsze włączenie jquery.unobstrusive-ajax nie rejestruje linku – allenylzhou

+0

Miałem jquery- {version} .js dwa razy w moim BundleConfig - raz pod moim pakiet jquery i raz pod pakietem ajax To spowodowało ten sam problem dla mnie, więc dziękuję za umieszczenie mnie na właściwej ścieżce! – Arwin

Powiązane problemy