代码之家  ›  专栏  ›  技术社区  ›  Alexander Prokofyev

可为空<>作为ViewPage的TModel

  •  1
  • Alexander Prokofyev  · 技术社区  · 15 年前

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

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

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

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

    2 回复  |  直到 13 年前
        1
  •  3
  •   Levi    15 年前

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

    至于为什么最初不允许使用结构类型,原因有很多。其中包括:(a)它可能鼓励人们为模型使用自定义结构类型,这几乎从来都不是正确的做法;(b) 不能将结构类型作为参数传递给Controller.UpdateModel();(c) 模型应具有参考等式,以便过滤器能够检查和修改它们;(d) 内置结构类型(如int等)本身通常不可用作模型对象;(e)结构类型不支持继承,例如将int模型传递到ViewPage<长期>会爆炸的。

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

        2
  •  1
  •   Marc Gravell    15 年前

    单个值不是真正的“模型”-您可以使用字典和cast?