У меня есть модель представления, отправленная в действие редактирования моего контроллера. ViewModel содержит ссылки на EntityObjects. (да, я в порядке с ним и не нужно дублировать все свойства сущностей в viewmodel).
Я создаю экземпляр модели представления, а затем вызываю UpdateModel. Я получаю сообщение об ошибке, что свойство имеет значение "null", что отлично, поскольку это родственная модель. Я пытаюсь исключить свойство из привязки во время привязки модели. При отладке я вижу в объекте, где привязка модели пытается установить значение свойства null.
Вот мое действие для редактирования:
var model = new SimplifiedCompanyViewModel(id);
var excludeProperties = new string[] {
"Entity.RetainedEarningsAccount.AccountNo"
,"Property.DiscountEarnedAccount.ExpenseCodeValue"
,"Entity.EntityAlternate.EntityID"
,"Property.BankAccount.BankAccountID"
,"Entity.PLSummaryAccount.AccountNo"
,"Property.RefundBank.BankAccountID"
,"Company.Transmitter.TCC"
};
try
{
UpdateModel<SimplifiedCompanyViewModel>(model, String.Empty, null, excludeProperties);
if (ModelState.IsValid)
{
//db.SaveChanges();
}
return RedirectToAction("Index");
}
catch
{
return View(model);
}
Я рассмотрел несколько других вопросов, касающихся указания "префикса", но я не думаю, что это проблема, поскольку я говорю ему привязывать к экземпляру viewmodel не только объект сущности.
Я правильно ли исключаю свойства? Странная вещь, похоже, происходит только на этом предмете. Я подозреваю, что это может быть проблемой с тем фактом, что на самом деле нет банка возврата, связанного с моей организацией. Но у меня есть другие связанные элементы, которые не существуют и не видят той же проблемы.
Больше информации... поскольку мне говорят, что модель не разработана хорошо.
Компания связана с Банком. В представлении "Компания" отображается связанный с этим BankAccount.BankAccountId, и есть скрытое поле с BankAccount.Key. Я использую функцию автозаполнения jQueryUI, чтобы предоставить раскрывающийся список банковских счетов, отображающий BankAccount.BankAccountId, и когда один из них выбран, код jQuery изменяет скрытое поле, чтобы иметь правильное значение Key. Итак, когда это опубликовано, я не хочу, чтобы текущие банковские счета BankAccountID были изменены, поэтому я хочу, чтобы он пропускал привязку этого поля.
Если я исключу BankAccountId в модели, то в представлении редактирования BankAccount пользователь никогда не сможет изменить BankAccountId, поскольку он не будет связан. Я не уверен, как это указывает на плохой дизайн модели.