我经常遇到项目中的 View 抛出空引用异常的情况。
@model Johnny.Application.TestModel
<div>@(Model.SomeText)</div>
如果 Model 为 null,则会引发错误。
但是人们是如何处理的呢?我当然不会在 View 中随处看到代码示例,其中包含丑陋的空检查乱七八糟的代码。这让我相信大多数时候, Controller 不应该返回空模型。但是,您如何才能更巧妙地执行此操作呢?
现在,一旦有人不小心导致 Controller 返回空模型, View 模型就会崩溃,看起来有问题。实际上,这是 Controller 的错。并且 View 甚至可能不会“捕获”问题,它只会在模型的成员碰巧被使用(当然是大多数时候)时才会这样做。
出于各种原因,某些 View 可能希望处理空值。不过,我不认为这是大多数情况。显然,这是在 View 和 Controller 之间设置一些“契约”的问题。
我不喜欢我看到的选项:
- 每次使用时检查模型是否为空。 非常蹩脚!
- 一个大 if 语句用空模型包装整个 View 查看。想想浪费的代码空间。差劲!
- 在顶部添加一个if check with a throw。不错,但看起来很傻。有点跛。
我很想知道是否存在类似这些选项来设置“无空值”契约(Contract):
- Controller 方法的属性,如 [NoNullModels]。我怀疑这是否存在,因为我认为 Controller 不知道它连接到哪个 View 。
- 在 View 中,指示器如 @MVC3.HeyDontAllowNulls 或其他一些抛出异常的标准方法(如上面的选项 3)
最佳答案
我在这里问了一个类似的问题Should one try to guard against null reference exceptions / index out of bounds exceptions in MVC views?并得到了很好的回应。简而言之,最好在您的 Controller 甚至单元测试中添加 null 检查,而不是在您的 View 中。
关于c# - MVC3 View : Handling null models with finesse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9518739/