Сохранение обновлений для сложных моделей с MVC3 - PullRequest
2 голосов
/ 04 июля 2011

У меня есть сложный класс модели, из которого только (и могут быть) отредактированы только несколько строковых столбцов.Когда я открываю и редактирую пару этих столбцов и сохраняю форму, строковые столбцы отправляются обратно очень хорошо, но другие столбцы (массива) равны нулю - это нарушает сохранение в Entity Framework.

Чтоправильный способ сделать это с MVC3 и EF?

Ответы [ 3 ]

2 голосов
/ 04 июля 2011

Загрузите модель из базы данных, затем вызовите TryUpdateModel (yourDbLoadedModel), чтобы объединить значения из вашей формы с вашей моделью.Вы также можете указать поля для включения или исключения в этой привязке, если вы хотите включить только несколько определенных полей из формы - это рекомендуется, чтобы кто-то не смог взломать вашу модель, введя поля формы, которые не предназначены для такогов качестве значения первичного ключа.

1 голос
/ 04 июля 2011

Я думаю, что это общая проблема.Я использую несколько подходов:

1) Это мой рекомендуемый подход.Используйте модель представления, которая охватывает только те свойства, которые вы хотите редактировать.Затем это может быть связано напрямую, как вы сейчас пытаетесь сделать.Проблема этого подхода заключается в том, что вам необходимо скопировать свойства из ваших объектов EF и обратно в них.Если присвоение имен непротиворечиво, вы можете использовать копир с немым отражением.Если это не так, или вам нужно пройтись по графику, чтобы скопировать их обратно, то я склоняюсь к тому, чтобы поместить эту пользовательскую логику в класс viewmodel.(Что делает его не просто моделью представления, но ничем иным, как моделью представления, и представление должно знать о его существовании.)

2) Использовать модифицированное связывание.Вы можете указать [Bind (Exclude = "this, that, theother")], чтобы остановить обнуление определенных свойств, а когда свойства являются скалярными свойствами, которые вы просто не хотите иметь на экране, используйте Html.HiddenFor (x=> x.myprop)

Другой подход -

3) Пользовательские связыватели.Вы можете зарегистрировать свое собственное связующее и создать все, что вам нужноЭто не тот подход, который я использовал.но может работать хорошо.

Причина 1) гораздо лучший подход, чем 2) (IMHO) состоит в том, что 2) предоставляет всю вашу модель для обновления через HTML POST.Механизм связывания MVC будет привязывать изменения ко всему, что подходит, поэтому хорошо разработанный POST может делать некоторые неожиданные вещи: обходить отношения, которые вы не намеревались раскрыть, и обновлять свойства.С другой стороны, шаблон Viewmodel должен иметь сущности, которые отображают только те поля, с которыми взаимодействует пользователь, поэтому их можно безопасно связывать.

0 голосов
/ 04 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...