Конструкция привязки MVC ViewModel против сплющивания

В моей ViewModel (также в моей модели Domain) у меня есть своего рода динамическая структура свойств, в которой элементы профиля представляют собой список базового класса.ProfileVM и обратитесь к ProfileDefinitionElement (просто, чтобы объяснить ViewModel, не вставляя полную вещь).

    public class OwnProfileVM
{
    public OwnProfileVM() {}
    public ProfileDefinitionVM ProfileDefinitionVM { get; set; }
    public ProfileVM ProfileVM { get; set; }
}

Поэтому я связываю свои свойства с помощью оператора Linq Single:

 @Model.ProfileDefinitionVM.ProfileElementDefinitions.Single(p => p.Key == ProfileElementKey.CompanyName.ToString()).Title

Это работает для отображения данных. Но при отправке обратно так:

@Html.TextBoxFor(model => ((ProfileElementTextVM)model.ProfileVM.ProfileElements
            .Single(p=> p.ProfileElementDefinition.Key == ProfileElementKey.CompanyName.ToString()))
            .Text

... свойства модели являются нулевыми. Это из-за конструктора без параметров, который создаетOwnProfileVM объект без каких-либо заполненных свойств.

После некоторых исследований я обнаружил, что есть два способа решить эту проблему:

«Свести» модель представления. Поэтому у меня будет фиксированное свойство для каждого элемента профиля. Это сработало бы, но недостатком было бы то, что я не мог сопоставить данные с Automapper. Мне бы пришлось заполнить ViewModel для модели "вручную". Это привело бы к большему количеству кода в контроллере и «большему», но более простому ViewModel. Видел вЭта статьяНайдите способ передать данные Definition в конструктор ViewModel, чтобы построить список свойств перед отправкой назад.

Теперь мои вопросы:

Возможен ли второй путь, и если да, то как это сделать? Я не нашел способ сделать это.Если на первый вопрос можно ответить «да», какой путь вы бы предпочли?

Ответы на вопрос(1)

Ваш ответ на вопрос