Search code examples
asp.net-mvcviewstrong-typing

Strongly-typed view difference (MVC sources vs. assembly)


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?


Solution

  • 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