Сильно типизированная форма в MVC, которая соответствует другому типу?
Когда я задаю входные данные формы с помощью метода @Html.TextBoxFor, сгенерированный входной элемент не обязательно будет соответствовать типу, ожидаемому в методе действия формы.
Допустим, у меня есть два класса:
public class HomeA
{
public int A { get; set; }
}
public class HomeB
{
public int B { get; set; }
}
HomeA - это модель моего взгляда. Если действие контроллера ожидает HomeB, то я не могу предоставить необходимый элемент ввода в строгой форме в моей форме:
@using (Html.BeginForm())
{
@Html.TextBoxFor(model => model.A)
}
Эта форма, очевидно, не будет отображаться в собственность HomeB.
3 ответа
Действие контроллера не должно ожидать HomeB. Используйте одну модель представления для каждого действия. Если вы отправляете ViewModel из XYZ, то в общем случае ваш ActionMethod принимает ViewModel из XYZ. Это мои общие мысли в любом случае для согласованности / удобочитаемости. Однако, если это работает для вас, делайте это, пока есть связь.
ASP.net MVC - одна ViewModel на просмотр или на действие?
Что касается примечания о композиции и наследовании, обратите внимание на архитектуру ASP.NET MVC: ViewModel по составу, наследованию или дублированию?
Проверьте http://lostechies.com/jimmybogard/2009/04/24/how-we-do-mvc/
Вы должны создать класс HomeAB, который содержит как HomeA, так и HomeB
Если вам нужно создать и показать некоторые элементы, которые принадлежат обоим классам A и B, вы можете разработать интерфейс, а затем наследовать этот интерфейс. Или вы можете создать другой класс AB, который наследуется от A & B.
Надеюсь это поможет!