1

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

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

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

但可空类型是值类型。也许定义可以不那么严格......

4

2 回答 2

3

目前这样做是没有意义的,因为 ViewPage<T> 在内部总是验证模型是 T 的实例。由于此检查,您永远无法传递 null 。

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

事实证明,(c)可能不是问题,因为结构类型应该是不可变的,但其他项目要求在支持结构类型之前给予充分的考虑和设计决策。支持这些的后果远远大于仅仅消除对 ViewPage<T> 的约束。

于 2009-06-18T16:44:26.947 回答
1

单个值并不是真正的“模型”-您可以只使用字典并进行转换吗?

于 2009-06-18T11:55:22.253 回答