Как исключить свойства из привязки при вызове UpdateModel ()?

У меня есть модель представления, отправленная в действие редактирования моего контроллера. ViewModel содержит ссылки на EntityObjects. (да) меня это устраивает, и мне не нужно дублировать все свойства сущностей в модели представления).

Я создаю экземпляр модели представления, а затем вызываю 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);
}

Я рассмотрел несколько других проблем, связанных с указанием «префикса», но я не думаю, что это проблема, поскольку я говорю, что он должен привязаться к экземпляру модели представления, а не только к объекту сущности.

Правильно ли я исключаю свойства? Странная вещь происходит только с этим элементом. Я подозреваю, что это может быть проблема с тот факт, что на самом деле нет банка возврата, связанного с моей организацией. Но у меня есть другие связанные элементы, которых не существует, и я не вижу той же проблемы.

Подробнее ... раз уж мне сказали, что модель плохо спроектирована.

Компания связана с BankAccount. В представлении «Компания» отображается текущий связанный BankAccount.BankAccountId и есть скрытое поле с BankAccount.Key.Я использую функцию автозаполнения jQueryUI, чтобы предоставить раскрывающийся список банковского счета, отображающий BankAccount.BankAccountId, и когда он выбран, код jQuery изменяет скрытое поле, чтобы иметь правильное значение ключа. Итак, когда это будет опубликовано, я не хочу, чтобы текущий банковский счет BankAccountID изменялся, поэтому я хочу, чтобы он пропустил привязку этого поля.

Если я исключу BankAccountId из модели, то в режиме редактирования BankAccount пользователь никогда не сможет изменить BankAccountId, поскольку он не будет привязан. Я не уверен, как это указывает на плохой дизайн модели.

18
задан PilotBob 2 December 2011 в 18:48
поделиться