我目前正在使用ASP.NET MVC 2.0 RC2,最近从版本1.0开始。
我注意到我的一些观点不再适用。我有一些继承自强类型IEnumerable
的观点,如下所示:
Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyProject.Models.MyType>>"
过去,我在我的视图中列举了这个模型:
<% foreach (var item in Model) { %>
但那不再适用。我在浏览器中收到错误:
foreach statement cannot operate on variables of type 'object' because 'object' does not contain a public definition for 'GetEnumerator'
我可以通过执行必要的强制转换来解决它:
<% foreach (MyType item in (IEnumerable<MyType>)Model) { %>
但这非常难看,这表明行为发生了变化,所以我需要知道原因。
我查了一下,ViewPage.Model
确实被定义为object
,所以我想知道这是如何以前所未有的方式运作的。它在ASP.NET MVC 1.0中也被定义为object
。
是什么给出了?
注意:我将MVC源代码加载到我的项目中。这会有所作为吗?是否有一些元数据在运行时被注入,这使得这项工作成为可能,通过查看源中的object
定义来阻止这样做?
答案 0 :(得分:1)
FWIW,ViewPage.Model
在TModel
中的ViewPage<TModel>
类型,是您正在使用的通用类。 (在示例代码中,TModel
为IEnumerable<MyProject.Models.MyType>
)。所以它不应该是直的object
。
如果您将@Page
更改为
Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyType>>"
并添加
<%@ Import namespace="MyProject.Models" %>
到视线?