问题
I'm trying to create a strongly typed partial view
<%@ 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>
in the Controller:
IEnumerable<Services> Model=null;
using (tl ctx = new tl(Config.ConnectionString))
{
Model = ctx.Services.ToList();
}
return View("List",Model);
This workied well when running in a project with the binary assembly System.Web.Mvc
referenced.
But if I remove binary assembly and add a project with MVC sources for debugging, it stops recognizing strongly typed views.
It's working like a ViewPage
instead of ViewPage<TModel>
As result I'm getting the error:
Compiler Error Message: CS1579: foreach statement cannot operate on variables of type 'object' because 'object' does not contain a public definition for 'GetEnumerator'`
Why would this work with the compiled MVC, but not with the sources? And how can I make the sources run correctly?
回答1:
Have you changed this line in ~/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">
to this?:
<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">
Actually this Steve Sanderson's post might be helpful
回答2:
I don't know of a reason that might cause a referenced source project to behave differently than its own build output(assembly). Still I can recommend:
1- Make sure the source you're using is the same the assembly was built off.
2- Make sure you added a reference to the source project.
3- RC on your solution file, choose clean solution, then rebuild and try again.
来源:https://stackoverflow.com/questions/892332/strongly-typed-view-difference-mvc-sources-vs-assembly