#c_sharp #aspnet #aspnet_mvc #dynamic
Добрый день! При написании приложения на MVC возникла следующая ситуация: У меня есть в базе данных таблица User, в которой есть поле IdRole, которое может быть null. Класс-модель для таблицы User выглядит так (эта модель сгенерировалась с помощью ADO.NET): [Table("risksdb.user")] public partial class user { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] public user() { risk_record = new HashSet(); } [Key] public int IdUser { get; set; } public int? IdRole { get; set; } [Required] [StringLength(45)] public string Login { get; set; } [Required] [StringLength(45)] public string Password { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] public virtual ICollection risk_record { get; set; } public virtual role role { get; set; } } Как видно, свойство Role может принимать null. Для вывода таблицы user, я использую ViewBag, который является dynamic. В него (ViewBag.Users)я помещаю IEnumerable Users в своем контроллере и в cshtml-файле я вывожу его примерно так: @foreach (var u in ViewBag.Users) { IdUser
IdRole
Login
Password
} Вопрос: Нужно ли делать проверку на null для поля переменной типа dynamic или нет? Если да, то как правильно сделать это и где (в контроллере или еще где-то)? Доп. вопрос: Как лучше передавать в cshtml-файл модель: через ViewBag или через параметр object model? @u.IdUser
@u.IdRole
@u.Login
@u.Password
Ответы
Ответ 1
1) Зависит от того, может быть у этой переменной значение null или нет. Если в контроллере всегда безусловно что-то присваиваете ViewBag.Users, то и над проверкой заморачиваться ни к чему. Проверку нужно проводить там, где может возникнуть ошибка. Например, в представлении ошибка может возникнуть в цикле foreach, если ViewBag.Users будет равен null. 2) Конечно же через object model. Это удобный и общепринятый механизм. Достаточно в представлении (cshtml-файл) добавить строку @model IEnumerableи далее к модели обращаться через переменную Model. Это сразу даёт понимание типа модели. С передачей через ViewBag нет строгой типизации и понять, какого типа там данные может быть сложно. P.s. Просто представьте, что вы программируете только бизнес-логику приложения, а все представления в вашей команде пишет "верстальщик". Чтобы он каждый раз не спрашивал вас как получить из модели те или иные данные вы можете сказать ему, что в качестве модели передаете экземпляр класса User, поля данных которого заведомо описаны в вашем коде.
Комментариев нет:
Отправить комментарий