Nullable<>作为查看页面的模型

时间:2009-06-18 11:52:20

标签: c# asp.net-mvc viewmodel nullable reference-type

Nullable<>的可能原因是什么?不允许将类型作为System.Web.Mvc.ViewPage< TModel>的TModel参数传递。通用?这有时候很方便。

在ASP.NET MVC源中定义了TModel应该是一个类:

public class ViewPage<TModel> : ViewPage where TModel : class

但Nullable类型是值类型。也许定义可能限制性较小......

2 个答案:

答案 0 :(得分:3)

目前正在进行此工作是没有意义的,因为ViewPage&lt; T&gt;内部始终验证模型是否是T的实例。由于此检查,您永远无法传递null。

至于为什么首先不允许结构类型,有很多原因。其中:(a)它可能会鼓励人们为模型使用自定义结构类型,这几乎不是正确的事情; (b)您不能将结构类型作为参数传递给Controller.UpdateModel(); (c)模型应具有参考相等性,以便过滤器可以检查和修改它们; (d)内置的结构类型如int等,通常作为模型对象本身无用; (e)结构类型不支持继承,例如将int模型传递给ViewPage&lt; long&gt;会爆炸。

事实证明,(c)可能不是问题,因为结构类型应该是不可变的,但是其他项要求允许结构类型在支持之前给出充分的思考和设计决策。支持这些的后果远远大于仅删除ViewPage&lt; T&gt;。

上的约束

答案 1 :(得分:1)

单个值实际上并不是“模型” - 您可以使用字典并进行投射吗?