强类型视图差异(MVC源与汇编)

时间:2009-05-21 10:50:09

标签: asp.net-mvc view views strong-typing

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

<%@ 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,但不适用于源代码?我怎样才能使源正确运行?

2 个答案:

答案 0 :(得分: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">

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

答案 1 :(得分:0)

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