我正在尝试创建一个强类型的局部视图
<%@ 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,但不适用于源代码?我怎样才能使源正确运行?
答案 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,选择清洁解决方案,然后重建并重试。