强类型视图中的新错误 - 无法枚举模型?

时间:2010-03-01 22:44:08

标签: c# asp.net-mvc compiler-errors

我目前正在使用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定义来阻止这样做?

1 个答案:

答案 0 :(得分:1)

FWIW,ViewPage.ModelTModel中的ViewPage<TModel>类型,是您正在使用的通用类。 (在示例代码中,TModelIEnumerable<MyProject.Models.MyType>)。所以它不应该是直的object

如果您将@Page更改为

,是否会有所作为
Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyType>>"

并添加

<%@ Import namespace="MyProject.Models" %>

到视线?