2011-01-06 7 views
3

Ich verwende VirtualPathProvider, um thematische Ansichten bereitzustellen.Einbetten von Razor-Ansichten in die Klassenbibliothek als Ressourcen

In Aktion Methode mag ich durch Pfad eine Ansicht zurückzukehren

return View("~/Themes/SomeTheme.dll/Views/Content/Item.cshtml"); 

In Visual Studio Item.cshtml eine Build-Aktion "Ressource Embedded".
VirtualPathProvider stellt fest, dass .cshtml Datei, aber ich erhalte eine Fehlermeldung

The view at '~/Themes/SomeTheme.dll/Views/Content/Item.cshtml' must derive from WebViewPage, or WebViewPage<TModel>. 

Ich glaube, ich habe diese Ansicht zu kompilieren und ich habe these instructions gefolgt.

Nun kann der VirtualPathProvider Item.cshtml nicht finden, da es keine eingebettete Ressource mehr ist.

Wie löse ich dieses Problem? Ich kann keinen Verweis auf diese SomeTheme.dll hinzufügen, da das aktivierte Design beim Start der Anwendung dynamisch geladen wird.

Ich habe dies zuvor mit ASPX-Dateien getan und diese mussten nicht kompiliert werden. Sie arbeiteten als eingebettete Ressourcen aus der Box.

+0

Sorry für die späte Antwort, nicht diese Frage zu fangen. Haben Sie es geschafft, die kompilierten Ansichten jetzt zu starten? Wenn Sie die kompilierte Version verwenden, sollten Sie den DLL-Namen nicht im Pfad verwenden. –

+0

Ich schaffte es mit einem anderen Ansatz arbeiten. Machte einen Blogeintrag darüber http://mikakolari.fi/blogi/aspnetmvc-3-plugin-architecture-with-embedded-razor-views/ –

+0

Mika, der Link zu Ihrem Blog scheint nicht mehr gültig zu sein. Kannst du die Lösung hier posten? Ich habe das gleiche Problem mit den kompilierten Razor-Ansichten. – Nasir

Antwort

2

Ich stieß auf ein ähnliches Problem mit eingebetteten Aspx-Ansichten. Die Kompilierung beim Anzeigen der Seite hängt von einigen Einstellungen in der Datei web.config des Ordners Ansichten ab. Die eingebetteten Ressourcen befinden sich nicht im Ordner views. Verwenden Sie diese Einstellungen daher nicht und kompilieren Sie nicht.

0

Versuchen Sie this solution, um intellisense in Ihrer View-Klassenbibliothek zu behandeln. Möglicherweise müssen Sie der web.config die folgende Zeile hinzufügen.

<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />   

Versuchen Sie auch, @Inherits System.Web.Mvc.WebViewPage Aussagen zu jedem Ihrer eingebetteten Ansichten Hinzufügen (oder ersetzen die Basis clase Sie verwenden) dies zur Laufzeit zu handhaben.

1

Versuchen install-package EmbeddedResourceVirtualPathProvider

Verwandte Themen