【问题标题】:What is strongly-typed View in ASP.NET MVC什么是 ASP.NET MVC 中的强类型视图
【发布时间】:2011-02-23 04:53:02
【问题描述】:

什么是 ASP.NET MVC 中的强类型视图?

【问题讨论】:

    标签: asp.net-mvc view


    【解决方案1】:

    这是一个派生自System.Web.Mvc.ViewPage<TModel> 的aspx 页面。据说这个视图被强类型化为类型TModel。因此,此视图中有一个 Model 属性,其类型为 TModel,允许您直接访问模型的属性,如下所示:

    <%= Model.Name %>
    <%= Model.Age %>
    

    好像您的 aspx 页面源自 System.Web.Mvc.ViewPage,您需要从 ViewData 提取值,视图不再知道 TModel 类型:

    <%= (string)ViewData["Name"] %>
    <%= (int)ViewData["Age"] %>
    

    甚至更糟:

    <%= ((SomeModelType)ViewData["model"]).Name %>
    

    这样的代码没有编译时安全性。

    另请注意,对于强类型部分 (ASCX),有对应的 ViewUserControl&lt;TModel&gt;

    【讨论】:

      【解决方案2】:

      强类型视图用于渲染特定类型的模型对象,而不是使用一般的 ViewData 结构。通过指定数据类型,您可以访问模型类的 IntelliSense。

      【讨论】:

      • 如果 View 使用了多个 Model Classes 的字段或属性怎么办?
      • @AbidAli 创建一个单独的“视图模型”,其成员是多个模型类的实例。例如,如果您有ModelAModelBModelC,那么您将拥有一个视图模型:public class MyViewModel { public ModelA ModelA { get; set; } public ModelB ModelB { get; set; } public ModelC ModelC { get; set; }}
      【解决方案3】:

      它是一个视图,它指定传递给它的对象的类型作为它的模型 - 因此它不是从 ViewPage 继承的视图,而是从 ViewPage&lt;T&gt; 继承的,其中 T 是模型的类型。

      【讨论】:

        猜你喜欢
        • 2011-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多