1

我正在尝试创建一个强类型的局部视图

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"     Inherits="System.Web.Mvc.ViewPage<IEnumerable<Pt.Data.Services>>" %>
<table>
  <% foreach (Pt.Data.Services item in Model)
       { Html.RenderPartial("ServiceItem",item); } %>
</table>

在控制器中:

IEnumerable<Services> Model=null;
using (tl ctx = new tl(Config.ConnectionString))
{
    Model = ctx.Services.ToList();
}
return View("List",Model);

在引用二进制程序集的项目中运行时,这很有效System.Web.Mvc

但是,如果我删除二进制程序集并添加一个带有 MVC 源代码的项目进行调试,它就会停止识别强类型视图。

它的工作方式ViewPage类似于ViewPage<TModel>

结果我得到了错误:

编译器错误消息:CS1579:foreach 语句无法对“object”类型的变量进行操作,因为“object”不包含“GetEnumerator”的公共定义`

为什么这适用于已编译的 MVC,但不适用于源代码?以及如何使源正确运行?

4

2 回答 2

4

您是否在 ~/Views/Web.config 中更改了这一行:

<pages validateRequest="false"
       pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter,
                             System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
                             PublicKeyToken=31BF3856AD364E35"
       pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0,
                     Culture=neutral, PublicKeyToken=31BF3856AD364E35"
       userControlBaseType="System.Web.Mvc.ViewUserControl,
                            System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
                            PublicKeyToken=31BF3856AD364E35">

对此?:

<pages validateRequest="false"
       pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter,
                             System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
                             PublicKeyToken=NULL"
       pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0,
                     Culture=neutral, PublicKeyToken=NULL"
       userControlBaseType="System.Web.Mvc.ViewUserControl,
                            System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
                            PublicKeyToken=NULL">

实际上这个史蒂夫桑德森的帖子可能会有所帮助

于 2009-05-21T18:01:36.183 回答
0

我不知道可能导致引用的源项目的行为与其自己的构建输出(程序集)不同的原因。我仍然可以推荐:
1-确保您使用的源与组件的构建源相同。
2-确保您添加了对源项目的引用。
3- RC 在您的解决方案文件上,选择干净的解决方案,然后重建并重试。

于 2009-05-21T10:58:14.977 回答