2010-03-17 21 views
17

Ich versuche, eine stark typisierte Ansicht mit einem "MVC View User Control" zu erstellen, die mit Html.RenderPartial() gerendert wird. Die Oberseite meiner ascx Datei sieht so aus:ASP.NET MVC stark typisierte Teilansicht, gibt konnte Typfehler nicht laden

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Collections.IEnumerable<string>>" %> 

Es gibt nichts anderes auf dieser Seite zurzeit.

Wenn ich die app ausführen und laden Sie die Seite, die dieses Steuerelement macht, erhalte ich folgende Fehlermeldung:

Could not load type 'System.Web.Mvc.ViewUserControl<System.Collections.IEnumerable<string>>'. 

So, dann vereinfacht ich es:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<String>" %> 

Und dann, nur in Fall, es musste vollständig qualifiziert sein:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.String>" %> 

Jedes Mal bekomme ich den gleichen Fehler (Ersatztyp). Was mache ich hier falsch? Ich bin auf .NET 3.5 mit ASP.NET MVC 1.0 RTM.

Antwort

27

Ich habe es funktioniert. Ich folgte den Anweisungen von http://www.codewrecks.com/blog/index.php/2009/04/05/could-not-load-type-systemwebmvcviewpage/ und das hat den Trick für mich getan. Ich sollte beachten, dass ich auch zuerst auf den ASP.NET MVC 2.0 RC ab dem 17.03.2010 aktualisiert habe. Das Problem bestand für mich immer noch, bis ich die Anweisungen auf dieser Seite befolgte. Ich bin mir nicht sicher, ob ein neues MVC-Projekt das jetzt für Sie erledigt oder nicht.

Die Lösung, falls die referenzierte Seite weggeht, war eine Web.config meiner Ansichten Verzeichnis hinzuzufügen, und setzen diese in ihm:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <httpHandlers> 
    <add path="*" verb="*" 
     type="System.Web.HttpNotFoundHandler"/> 
    </httpHandlers> 

<!-- 
    Enabling request validation in view pages would cause validation to occur 
    after the input has already been processed by the controller. By default 
    MVC performs request validation before a controller processes the input. 
    To change this behavior apply the ValidateInputAttribute to a 
    controller or action. 
--> 
<pages 
    validateRequest="false" 
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
    <controls> 
    <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> 
    </controls> 
</pages> 
</system.web> 

<system.webServer> 
<validation validateIntegratedModeConfiguration="false"/> 
<handlers> 
    <remove name="BlockViewHandler"/> 
    <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/> 
</handlers> 
</system.webServer> 
</configuration> 

ich auch, dass für MVC beachten sollten 2.0 Sie benötigen um die Version # in der Konfiguration zu aktualisieren.

+0

Vielen Dank! Ich habe komplett vergessen, meinen View-Ordner web.config zu kopieren. Ich wünschte, der Fehler würde es deutlicher machen, dass dies falsch ist. – DavGarcia

+0

Wow, das gleiche Problem hier. Ich hatte die web.config - auf meinem Rechner gearbeitet - war nicht Teil meines Buildskripts. –

+0

Ich habe gerade eine MVC2-App erstellt und die Datei web.config aus diesem Views-Verzeichnis kopiert. Vielen Dank. –

Verwandte Themen