Używam MVC3 z widokami maszynki Razor i chciałbym utworzyć wielokrotne użyteczne DropDownLists dla kilku moich klas, ale po wielu poszukiwaniach nie znalazłem przykładu, który wykonuje dokładnie to, czego potrzebuję. ..Szablon edytora wielokrotnego użytku z klasą DropDownList dla obiektów biznesowych
na ten przykład mam dwie klasy tak: -
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public Group Group { get; set; }
}
public class Group
{
public int ID { get; set; }
public string Name { get; set; }
}
mam pracę Controller/Widok za osobę. Widok ma DropDownListFor kontrolę:
@model Person
...
@Html.DropDownListFor(o => o.Group.ID, (ViewData["groups"] as SelectList))
Widok używa klasy osoba bezpośrednio, a nie model pośredni, bo nie znaleźli powód do abstrakcyjnego od siebie na tym etapie.
Powyższe działa dobrze ... w sterowniku pobieram wartość z Group.ID w osobie zwróconej z widoku, znajdź go i ustaw Person.Group na wynik. Działa, ale nie jest idealny.
Znalazłem tutaj segregator: MVC DropDownList values posted to model aren't bound, który sprawdzi to dla mnie, ale nie mam jeszcze działającego ... ponieważ wydaje mi się to bardzo przydatne, jeśli mogę je ponownie wykorzystać.
Co chciałbym zrobić, to mieć coś takiego w szablonie: -
@model Group
@Html.DropDownListFor(o => o.Group.ID, (ViewData["groups"] as SelectList))
i używać go w widoku jak ten: -
@Html.EditorFor(o => o.Group)
Jednakże powyższe nie robi” Wydaje się, że działa ... powyższy edytorDla linii wstawia edytory dla całej klasy (np. pole tekstowe również dla Group.Description) ... zamiast wstawiania DropDownList z moimi grupami wymienionymi
Mam powyższe t emplate w pliku o nazwie Group.cshtml w widoku/Shared/EditorTemplates
Jeśli to zadziałało, to wtedy, gdy klasa ma właściwość typu Group, ten edytor DropDownList będzie użyty domyślnie (lub przynajmniej jeśli określony przez jakiś atrybut)
Dzięki z góry za wszelkie rady dostarczonych ...
To jest dobra odpowiedź. Chciałbym dodać, że możesz powiedzieć "EditorFor" gdzie szukać szablonów (np. Jeśli chcesz używać różnych szablonów w widoku według widoków). Wygląda to tak: '@ Html.EditorFor (x => x.Filters.SelectedImprintId," ~/Views/Books/EditorTemplates ", Model.Filters.ImprintItems)' –