如何在MVC视图中检查空值?

时间:2009-03-26 15:12:31

标签: asp.net-mvc

我正在使用带有LINQ-to-SQL类的MVC。

因为外键可以为null,我有一个记录有f.k. null和其他人都有价值观。

现在我在索引视图中显示它。

在索引视图中,我正在解决f.k.通过编写像

这样的代码
<%= Html.Encode(item.UserModified.UserName) %>

现在我有一个问题,即“未设置对象引用”。

这是因为我们在其中一个f.k中有空值。字段!

我可以在视图中编写代码来检查Associated对象是否指向null或什么都没有?

3 个答案:

答案 0 :(得分:5)

如有必要,您可以在视图中编写所需的任何代码,以便执行以下操作:

<%= 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 :(得分:1)

使用C#,您可以使用条件运算符:

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

但是,将UserName属性移动为item的直接子项或将其放在ViewData中可能是更好的选择。

答案 2 :(得分:0)

首先考虑在您的模型中,User的实例是否在没有Name的情况下有效。如果不是那么你应该在构造函数中放置一个保护子句。

其次,太多和重复的空检查是代码气味。您应该使用重构Replace Conditional with Polymorphism。您可以根据Null Object Pattern创建Null对象。

这将确保您无需在任何地方检查Null。