2012-05-04 30 views
6

Cześć wszystkim Mam klasy bazowej o nazwie pojazdu i mam wszystkie właściwości wspólne dla wszystkich pojazdów tam i mam wiele klas pochodnych zwanych samochodów Jeep, które wynikają z pojazdu i dodać więcej właściwościWiązanie modelu ASP.NET MVC 3.0 z klasami podstawowymi i pochodnymi?

Ex:

public class Vehicle 
{ 
    public int Color { get; set; } 
    public double Cost { get; set; } 
} 


public class Car : Vehicle 
{ 
    public SelectListItem Option { get; set; } 
} 

mam klasy stronę, na której mam listę pojazdów, jak ten

public class Page 
{ 
    public List<Vehicle> vehicles { get; set; } 
} 

Mój pogląd jest mocno typy do klasy strony, tak moim zdaniem jestem zapętlenie nad wszystkimi pojazdami wyświetlanych na stronie tak, ten kod jest wewnątrz @using (Html.BeginForm()), więc zakładać z powrotem pozycje użytkowników

for(int i=0;i<Model.Vehicles.Count;i++) 
{ 
    <div id="Question"> 
     @{ 
      @Html.EditorFor(m => m.Vehicle[i], VehicleConstants.GetTemplateName(Model.Questions[i])); 
     } 
    <br /> 
    </div> 
} 

używam jednego szablonu Edytor dla każdego typu pojazdu, więc VehicleConstants.GetTemplateName wywołanie funkcji po prostu zwraca Nazwa szablon do użycia w zależności od typu pojazdu

Ten szablon po prostu pisze właściwości od klasy samochodu lub klasie Jeep (pochodzące klasy + klasy bazowej)

problem mam jest, gdy formularz jest wysłany z powrotem Mogę tylko uzyskać dostęp do właściwości pojazdu klasy podstawowej w moim kontrolerze Nie mogę uzyskać wartości właściwości samochodu klasy sub lub Jeep.

 [HttpPost] 
    public string ReadPost(Page page) 
    { 
    } 

Jaki jest najlepszy sposób, aby te wartości były wyświetlane automatycznie po przesłaniu formularza?

Czy tworzenie niestandardowej klasy segregatorów jest moją jedyną opcją? Czy ktoś może mi podać przykładowy kod, jak to zrobić? Każda pomoc doceniona.

Odpowiedz

6

Do tego celu należy użyć niestandardowego segregatora. Domyślny segregator modelu nie wie, który konkretny typ utworzyć instancję. W każdym rzędzie możesz umieścić ukryte pole wskazujące konkretny typ, który tworzy niestandardowy segregator modelu. Mam shown this in action here. Przy okazji zauważ, że używając standardowej konwencji nazewnictwa szablonów, możesz pozbyć się pętli for, której używasz, a także metody VehicleConstants.GetTemplateName.

Powiązane problemy