Jestem zaskoczony przez ten problem i nie jestem pewien, czy to mój brak zrozumienia struktury MVC, platformy .NET, czy co. Ale niektóre wyjaśnienia z dowolnego zakątka zostałyby tutaj docenione.Dziedziczona właściwość interfejsu nie została znaleziona przez powiązanie z modelem
Co próbuję zrobić: użyć powiązania modelu ASP.NET MVC3 do renderowania formantów HTML w widoku. W szczególności próbuję powiązać interfejs zamiast konkretnej klasy.
Błąd: wyjątek ArgumentException "Właściwość [bla] nie została znaleziona." jest generowany podczas ładowania strony.
Kod:
Interface IFoundation
{
int Id { get; set; }
}
Interface IChild: IFoundation
{
string Name { get; set; }
}
Class Concrete: IChild
{
int Id { get; set; }
string Name { get; set; }
}
Widok:
@model IChild
@Html.EditorFor(x => x.Id)
Kiedy próbuję załadować widoku ArgumentException jest wyrzucany z wezwania do EditorFor() stwierdzające, że nieruchomość Id nie może być uznany. Jeśli jednak powiążę się z klasą Concrete, bindowanie działa dobrze.
Czy ktoś wie, dlaczego EditorFor() nie byłby w stanie rozwiązać dziedziczonej właściwości z interfejsu podstawowego?
Spróbuj użyć zajęć abstrakcyjnych. – wnascimento
Tak właśnie zacząłem: pisanie klas abstrakcyjnych, które implementują moje interfejsy. Moje konkretne klasy mogą następnie dziedziczyć i nadpisywać abstrakty oraz (w chwili obecnej) moje poglądy są również wiążące dla streszczeń. Nie jestem pewien, czy powiązanie z abstrakcyjnymi klasami bazowymi będzie działało dla widoków w dłuższej perspektywie - Kaleb poniżej sugeruje implementację klas ViewModel dla powiązania. Nie jestem chętny do rozpoczęcia tej drogi w tej chwili, ale w końcu mogę tam skończyć. –
Porady Kaleba są świetne, Automapper/ViewModels jest dobrym rozwiązaniem. – wnascimento