2009-05-21 46 views
1

我試圖創建一個強類型的局部視圖強類型的視圖差異(MVC源與組裝)

<%@ 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); 

這workied以及在二進制程序集System.Web.Mvc引用的項目中運行。

但是,如果我刪除二進制程序集並添加一個項目與MVC源調試,它會停止識別強類型的意見。

它的工作就像一個ViewPage代替ViewPage<TModel>

至於結果,我發現了錯誤:

Compiler Error Message: CS1579: foreach statement cannot operate on variables of type 'object' because 'object' does not contain a public definition for 'GetEnumerator'`

爲什麼會在編譯MVC,但不與源這項工作?我怎樣才能讓資源正確運行?

回答

4

您有沒有改變〜這條線/瀏覽/ 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可能會有所幫助

+0

不,我沒有將PublicKeyToken設置爲NULL。 真的,它可以幫助。 我會盡力而爲。 – bug0r 2009-05-22 15:59:51

0

我不知道可能導致引用的源項目行爲不同於其自己的生成輸出(程序集)的原因。 我仍然可以推薦:
1-確保您使用的源代碼與程序集構建的源代碼相同。
2-確保您添加了對源項目的引用。
3您的解決方案文件中的RC,選擇乾淨的解決方案,然後重新生成並重試。

+0

沒有正面結果。 我想也許原因是編譯MVC。 發佈模式下的編譯源文件大小爲179 712字節 但是來自MVC版本的二進制程序集的大小爲186 176字節 看起來像一些泛型類不會被編譯或類似的東西。 – bug0r 2009-05-21 11:06:05