Слишком часто я сталкивался с ситуацией, когда представление в моем проекте выдает исключение нулевой ссылки .
@model Johnny.Application.TestModel
<div>@(Model.SomeText)</div>
Выдает ошибку, если Модель равна null .
Но как люди справляются с этим? Я, конечно, не вижу примеров кода везде с ужасными пустыми проверками, засоряющими код в представлении. Это наводит меня на мысль, что в большинстве случаев контроллеры не должны возвращать нулевые модели. Но как вы можете усилить это с большей утонченностью?
Прямо сейчас, как только кто-то случайно заставляет контроллер возвращать нулевую модель, модель представления взрывается и выглядит виноватой. На самом деле, это была ошибка контроллера. И представление может даже не «поймать» проблему, оно сделает это только в том случае, если члены модели привыкнут (что, разумеется, чаще всего).
По разным причинам некоторые представления могут захотеть обрабатывать нулевые значения. Я не ожидал, что это будет в большинстве случаев. Очевидно, что это вопрос установки какого-то «контракта» между представлением и контроллером.
Мне не нравятся варианты, которые я видел:
- Проверять, является ли модель нулевой каждый раз, когда она используется. Очень хромой !
- Один большой оператор if , охватывающий весь вид с нулевой моделью
проверять. Подумайте о потраченном впустую коде недвижимости. Lame!
- Добавьте если проверить с броском вверху. Неплохо, но кажется глупым. Мягко хромает.
Я бы хотел знать, существует ли что-то вроде этих опций для установки контракта "нет нуля":
- Атрибут в методе контроллера, например [NoNullModels]. Я сомневаюсь, что это существует, так как я не думаю, что контроллер знает, к какому виду он подключается.
- В представлении такой индикатор, как @ MVC3.HeyDontAllowNulls или какой-либо другой стандартный способ генерирования исключения (как вариант 3 выше)