Сильно типизированная форма в 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.

Надеюсь это поможет!

Другие вопросы по тегам