2013-07-31 11 views
7

Mam lista miejscJak mogę zadzwonić EditorFor ze sterownika

public class Location 
{ 
    public string LocationName { get; set; } 
    public string Address { get; set; } 
} 

stworzyłem szablon edytor dla tej klasy

<div> 
    <span>@Html.TextBoxFor(a => a.LocationName)</span> 
    <span style="color: red;">@Html.TextBoxFor(a => a.Address)</span> 
</div> 

Problem polega na tym, że lokalizacje załadować z ajax na mojej stronie, a następnie Mam zamiar wysłać wyniki z powrotem na serwer. Ale jak uzyskać tę lokalizację z określonym indeksem? To znaczy, że na pierwszym miejscu będzie generować tak:

<input type="text" name="Locations[0].LocationName" /> 

Na drugim miejscu po naciśnięciu „Dodaj lokalizację przycisku” powinien dostać tę lokalizację z serwera (z działaniem regulatora jako HTML ciąg), ale z indeksem 1 nie 0, ponieważ jest to następna lokalizacja.

Czy można to osiągnąć? Czy robię coś nie tak?

+0

Zmieniłbym to podejście do punktu końcowego usługi REST dla lokalizacji i zapisywania/ładowania lokalizacji za pomocą tej usługi. – vittore

+0

tj. Utwórz 'LocationCotroller: ApiController' i zaimplementuj' Get() ',' Get (id) ',' Put (id) ',' Post (id) 'do niego. JQuery użytkownika do odbierania/wysyłania json do usługi. – vittore

+0

Ale nie używam usługi REST Mam tylko contollerów i akcji GetLocation (indeks int) i zgodnie z tym indeksem chcę przywrócić kontrolę. – Sergey

Odpowiedz

3

coś takiego

[HttpGet] 
    public virtual ActionResult LocationEditor(int index) 
    { 
     ViewData.TemplateInfo.HtmlFieldPrefix = string.Format("Locations[{0}]", index); 
     return PartialView(@"EditorTemplateExplicitPathAsOnlyViewNameAintGonnaWork.cshtml"); 
    } 

A dla nazwy lokalizacji pojemnika

<div class="locations-container" data-item-count="@Model.Count"> 
    @for (int j = 0; j < Model.Count; j++) 
    { 
     @Html.EditorFor(model => model[j]) 
    } 
    <a href="#" class="add-location">Add Location</a> 
</div> 

Reszta odrobiną javascript, aby zwiększyć pozycja-danych-count po dodaniu i nazywają LocationNameEditorLocationNameEditor działanie z nowym indeksem jest na ciebie.

+0

To naprawdę super rozwiązanie !!! Jesteś superstar dzięki temu rozwiązaniu! Dziękuję bardzo kolego! Użyję tego rozwiązania. Zapomniałem, że możemy bezpośrednio zmienić właściwość HtmlFieldPrefix! Jeszcze raz dziękuję!!! – Sergey

+0

Zapraszamy:) – archil

2

Możesz spróbować użyć częściowych widoków i stworzyć metodę działania, która zwróci AjaxResult (uważam, że to prawda). Następnie możesz pozwolić kontrolerowi wypełnić model widoku i przekazać go do widoku częściowego, który ma być renderowany na stronie w określonym miejscu.

+0

To prawda, po prostu nie lubię bałaganić i odbierać fragmenty html z wniosek ajax, gdy mogę mieć zwykłe dane. – vittore

+0

To albo ponownie renderuj całą stronę, wywołując swoje główne działanie, albo rób, co inni proponują, i stwórz sobie usługę REST. – fourpastmidnight

Powiązane problemy