Конструкция привязки 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, чтобы построить список свойств перед отправкой назад.Теперь мои вопросы:
Возможен ли второй путь, и если да, то как это сделать? Я не нашел способ сделать это.Если на первый вопрос можно ответить «да», какой путь вы бы предпочли?