Как проверить нулевое значение в представлении MVC? - PullRequest
4 голосов
/ 26 марта 2009

Я использую MVC с классом LINQ-to-SQL.

, поскольку внешний ключ может быть нулевым, у меня есть одна запись, имеющая f.k. null и другие имеют значения.

теперь я отображаю его в виде индекса.

В индексном представлении я разрешаю f.k. написав код вроде

<%= Html.Encode(item.UserModified.UserName) %>

Теперь у меня проблема из-за того, что "ссылка на объект не установлена".

И это из-за того, что мы имеем нулевое значение в одном из ф.к. поле!

так я могу написать код, чтобы проверить, указывает ли связанный объект на ноль или ничего?

Ответы [ 3 ]

5 голосов
/ 26 марта 2009

При необходимости вы можете написать любой код в представлении, так что вы можете сделать:

<%= Html.Encode(item.UserModified.UserName ?? string.Empty) %>

Вы также можете сделать расширение HtmlHelper, чтобы сделать это:

public string SafeEncode(this HtmlHelper helper, string valueToEncode)
{
    return helper.Encode(valueToEncode ?? string.Empty);
}

Вы можете просто сделать:

<%= Html.SafeEncode(item.UserModified.UserName) %>

Конечно, если UserModified имеет значение null, а не UserName, вам потребуется другая логика.

1 голос
/ 26 марта 2009

С C # вы можете использовать условный оператор:

<%= Html.Encode(item.UserModified == null ? "" : item.UserModified.UserName) %>

Однако может быть лучше переместить свойство UserName в непосредственный дочерний элемент элемента или поместить его в ViewData.

0 голосов
/ 18 сентября 2010

Сначала подумайте, допустим ли в вашей модели экземпляр User без Name. Если нет, тогда вы должны поместить в конструктор предложение guard.

Во-вторых, слишком много повторяющихся нулевых проверок - это запах кода. Вы должны использовать рефакторинг Заменить условное на полиморфизм . Вы можете создать нулевой объект в соответствии с Null Object Pattern .

Это гарантирует, что вам не нужно проверять Null везде.

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