c# - MVC3 View : Handling null models with finesse

标签 c# asp.net asp.net-mvc-3 razor

我经常遇到项目中的 View 抛出空引用异常的情况。

@model Johnny.Application.TestModel
<div>@(Model.SomeText)</div>

如果 Modelnull,则会引发错误。

但是人们是如何处理的呢?我当然不会在 View 中随处看到代码示例,其中包含丑陋的空检查乱七八糟的代码。这让我相信大多数时候, Controller 不应该返回空模型。但是,您如何才能更巧妙地执行此操作呢?

现在,一旦有人不小心导致 Controller 返回空模型, View 模型就会崩溃,看起来有问题。实际上,这是 Controller 的错。并且 View 甚至可能不会“捕获”问题,它只会在模型的成员碰巧被使用(当然是大多数时候)时才会这样做。

出于各种原因,某些 View 可能希望处理空值。不过,我不认为这是大多数情况。显然,这是在 View 和 Controller 之间设置一些“契约”的问题。

我不喜欢我看到的选项:

  1. 每次使用时检查模型是否为空。 非常蹩脚!
  2. 一个大 if 语句用空模型包装整个 View 查看。想想浪费的代码空间。差劲!
  3. 在顶部添加一个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/

相关文章:

c# - 如何使文本框禁用但可选择

c# - LINQ 数据上下文不显示方法

asp.net - 停止对 Ajax 页面的直接页面调用

asp.net-mvc - 具有不同参数名称的 Asp.Net 路由

asp.net-mvc - 使用 Entity Framework 保存更改/更新数据集中的现有对象,而不必分别设置每个属性

performance - 网站优化/减少asp.net mvc 3中的加载时间

c# - 构建时 T4 转换的产品仅在下一次构建中使用

c# - 如何使用 Android C# 以编程方式检查 CheckBox?

c# - 使用 Entity Framework asp.net mvc登录流程

c# - 如果 Eval 不为空,如何有选择地在 GridView 中显示按钮?