我正在使用带有LINQ-to-SQL类的MVC。
因为外键可以为null,我有一个记录有f.k. null和其他人都有价值观。
现在我在索引视图中显示它。
在索引视图中,我正在解决f.k.通过编写像
这样的代码<%= Html.Encode(item.UserModified.UserName) %>
现在我有一个问题,即“未设置对象引用”。
这是因为我们在其中一个f.k中有空值。字段!
我可以在视图中编写代码来检查Associated对象是否指向null或什么都没有?
答案 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。