MVC 3 использует одну и ту же модель в двух похожих представлениях с необнуляемыми типами - PullRequest
0 голосов
/ 21 сентября 2011

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

Помимо двух чрезвычайно похожих моделей, как MVC 3 правильно справляется с этим?

Спасибо!

Ответы [ 3 ]

1 голос
/ 21 сентября 2011

Как я понимаю, вы хотите знать, как узнать, какие флаги были в форме.

Добавьте на свою страницу скрытые элементы для каждого флажка, который будет указывать на наличие флажка.

Помимо двух чрезвычайно похожих моделей, как MVC 3 должен правильно с этим справляться?

Вам следует создать частичное представление.

ADD

Что касается других предложений, наилучшим и БЕЗОПАСНЫМ способом является проверка (в действии получения), какие флаги может изменить текущий пользователь (его права) и чем изменить его в базе.

0 голосов
/ 21 сентября 2011

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

Самое простое решение (если вы не хотите создавать модели с несколькими представлениями) - это отправить форму обратно на различные действия контроллера. Действие уровня администратора будет использовать логические значения для обновления модели, а другое действие - нет. Это предотвращает любые чрезмерные риски. Добавление скрытых полей в представление не даст вам никакой безопасности; не доверяйте данным, которые вы получаете из браузера. Никогда.

0 голосов
/ 21 сентября 2011

Если я сделаю все правильно, вы должны внедрить в свою модель значение nullable bool и действовать соответствующим образом для их обработки.

Посмотрите на этот ответ для аналогичного вопроса.Вы найдете несколько ссылок, которые могут помочь

...