【发布时间】:2011-02-23 04:53:02
【问题描述】:
什么是 ASP.NET MVC 中的强类型视图?
【问题讨论】:
标签: asp.net-mvc view
什么是 ASP.NET MVC 中的强类型视图?
【问题讨论】:
标签: asp.net-mvc view
这是一个派生自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<TModel>。
【讨论】:
强类型视图用于渲染特定类型的模型对象,而不是使用一般的 ViewData 结构。通过指定数据类型,您可以访问模型类的 IntelliSense。
【讨论】:
ModelA、ModelB 和ModelC,那么您将拥有一个视图模型:public class MyViewModel { public ModelA ModelA { get; set; } public ModelB ModelB { get; set; } public ModelC ModelC { get; set; }}。
它是一个视图,它指定传递给它的对象的类型作为它的模型 - 因此它不是从 ViewPage 继承的视图,而是从 ViewPage<T> 继承的,其中 T 是模型的类型。
【讨论】: