MVC3视图:使用精细处理空模型

Joh*_*man 6 c# asp.net razor asp.net-mvc-3

我经常遇到项目中的视图抛出空引用异常的情况.

@model Johnny.Application.TestModel
<div>@(Model.SomeText)</div>
Run Code Online (Sandbox Code Playgroud)

如果Modelnull,则抛出错误.

但人们如何处理这个?我当然没有看到代码样本到处都是丑陋的空检查乱丢了视图中的代码.这让我相信大多数时候,控制器不应该返回null模型.但是你怎么能用更精细的方式来强制执行呢?

现在,只要有人意外导致控制器返回空模型,视图模型就会爆炸并且看起来有问题.实际上,这是控制器的错.并且该视图甚至可能"捕获"该问题,只有在模型的成员碰巧被使用时才会这样做(当然,大多数时候都是这样).

由于各种原因,某些视图可能希望处理空值.不过,我不认为这是大多数情况.显然,这是在视图和控制器之间设置一些"契约"的问题.

我不喜欢我见过的选项:

  1. 每次使用时检查模型是否为空.非常蹩脚!
  2. 使用null模型检查包装整个视图的一个大if语句.想想浪费的代码房地产.瘸!
  3. 在顶部添加一个带有throwif检查.不错,但看起来很傻.轻度跛脚.

我很想知道是否存在类似这些选项来设置"无空"合同:

  • 控制器方法的属性,如[NoNullModels].我怀疑这是否存在,因为我不认为控制器知道它正在连接的视图.
  • 在视图中,像@ MVC3.HeyDontAllowNulls这样的指标或其他一些抛出异常的标准方法(如上面的选项3)

小智 2

我在这里问了一个类似的问题应该尝试防范 MVC 视图中的空引用异常/索引越界异常吗?并得到了良好的反响。简而言之,最好在控制器中添加空检查,甚至可能在单元测试中添加空检查,而不是在视图中添加空检查。