我经常遇到项目中的视图抛出 null引用异常的情况。
@model Johnny.Application.TestModel
<div>@(Model.SomeText)</div>
如果模型 null ,则会引发错误。
但人们如何处理这个?我当然没有看到代码样本到处都是丑陋的空检查乱丢了视图中的代码。这让我相信大多数时候,控制器不应该返回null模型。但是你怎么能用更精细的方式来强制执行呢?
现在,只要有人意外导致控制器返回空模型,视图模型就会爆炸并且看起来有问题。实际上,这是控制器的错。并且该视图甚至可能“捕获”该问题,只有当模型的成员碰巧被使用时才会这样做(当然,大多数时候都是这样)。
由于各种原因,某些视图可能希望处理空值。不过,我不认为这是大多数情况。显然,这是在视图和控制器之间设置一些“契约”的问题。
我不喜欢我见过的选项:
我很想知道是否存在类似这些选项来设置“无效”合同:
答案 0 :(得分:2)
我在这里问了一个类似的问题Should one try to guard against null reference exceptions / index out of bounds exceptions in MVC views?并得到了很好的答复。简而言之,最好在控制器中添加空检查,甚至可以在单元测试中添加空检查。
答案 1 :(得分:0)
这里有很多偏好,你可以做的一些是:
即使我的“CREATE”视图通常也会得到一个模型,即使它是空的(虽然它们中经常有一个IEnumerable&lt; SelectListItem&gt;),所以它们应该总是有模型传递给它们。
答案 2 :(得分:0)
我检查我的视图中的空值,有时是部分需要它的。
我有时会在我的控制器中创建默认值,如果有一个空值取决于你要做什么和可接受的。
例如,我有一个人订阅并设置通知的情况。如果他们没有通知,我的模型的子对象为空。我不想设置默认值,所以我在那里检查。在其他部分中,我只使用默认值。