【问题标题】:New Error in Strongly-Typed View - Cannot Enumerate Model? [closed]强类型视图中的新错误 - 无法枚举模型? [关闭]
【发布时间】:2010-03-01 22:44:08
【问题描述】:

我目前使用的是 ASP.NET MVC 2.0 RC2,最近从 1.0 版迁移过来。

我注意到我的一些观点不再有效。我有继承自强类型IEnumerable 的视图,如下所示:

Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyProject.Models.MyType>>"

过去,我在我的视图中列举了这样的模型:

<% foreach (var item in Model) { %>

但这不再有效。我在浏览器中收到错误:

foreach 语句不能对“object”类型的变量进行操作,因为“object”
不包含“GetEnumerator”的公共定义

我可以通过执行必要的强制转换来修复它:

<% foreach (MyType item in (IEnumerable<MyType>)Model) { %>

但这很丑陋,它表明行为发生了变化,所以我需要知道原因。

我检查了一下,ViewPage.Model 确实被定义为object,所以我想知道这怎么能像以前那样工作。在 ASP.NET MVC 1.0 中它也被定义为 object

什么给了?

注意:我已将 MVC 源代码加载到我的项目中。那会有什么不同吗?是否有一些在运行时注入的元数据使这项工作能够通过查看源代码中的object 定义来阻止这样做?

【问题讨论】:

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


    【解决方案1】:

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

    如果您将@Page 更改为

    Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyType>>"
    

    并添加一个

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

    到视图的线?

    【讨论】:

    • 添加行没有效果。
    • ViewPage.Model 智能感知为object。因此,页面似乎没有正确获取 Page 指令中的 Inherits 属性。
    • 事实上,所有页面都不再工作了。它们都将 ViewPage.Model 显示为对象。
    • 我卸载了 ASP.NET MVC 源项目,在 GAC 中恢复了对 ASP.NET 2.0 程序集的引用,问题就消失了。
    • 酷。也许你有一个旧版本的 MVC 源代码,它没有通用的 ViewPage?
    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 2016-11-28
    • 2011-08-24
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多