Вид Razor Тип не наследуется от "System.Web.WebPages.WebPage"

У меня возникла проблема с настройкой приложения asp.net mvc:

[HttpException (0x80004005): Type 'ASP._Page_Currency_Index_cshtml' does not inherit from 'System.Web.WebPages.WebPage'.]
System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) +11454171
System.Web.WebPages.BuildManagerWrapper.CreateInstanceOfType(String virtualPath) +347
System.Web.WebPages.VirtualPathFactoryManager.CreateInstanceOfType(String virtualPath) +239
System.Web.WebPages.WebPageHttpHandler.CreateFromVirtualPath(String virtualPath, IVirtualPathFactory virtualPathFactory) +57
System.Web.WebPages.WebPageRoute.DoPostResolveRequestCache(HttpContextBase context) +407
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +270

Шаги, которые я хочу сделать:

  • Переместите контроллеры со своими представлениями в отдельную библиотеку и поместите dll в папку bin.
  • Создайте виртуальный файловый провайдер и виртуальный файл, чтобы получить данные из сборки:

    public override Stream Open()
    {
     var resourceName = this.path;
     var asmName = this.assembly.GetName().Name;
     var manifestName = asmName + ".Views" + resourceName.Trim('~').Replace("/", ".");
     var resourceStream = this.assembly.GetManifestResourceStream(manifestName);
     return resourceStream;
    }
  • Добавьте эти строки в файл web.config:

    <configsections>
     <sectiongroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
     </sectiongroup></configsections><section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirepermission="false"><code>
     </code><section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirepermission="false"><code>
     
    <system.web.webpages.razor>
     <host factorytype="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
     <pages pagebasetype="System.Web.Mvc.WebViewPage">
     <namespaces>
     <add namespace="System.Web.Helpers">
     <add namespace="System.Web.Mvc">
     <add namespace="System.Web.Mvc.Ajax">
     <add namespace="System.Web.Mvc.Html">
     <add namespace="System.Web.Routing">
     <add namespace="System.Web.WebPages">
     </add></add></add></add></add></add></namespaces>
     </pages>
    </host></system.web.webpages.razor>
    </code></section></section>
  • Когда пользователь получает доступ к этой странице контроллера, он правильно компилируется в следующий класс:

    public class _Page_Currency_Index_cshtml : System.Web.Mvc.WebViewPage<gridmodel<currencymodel>> {
    </gridmodel<currencymodel>
  • И после этого он терпит неудачу с этой ошибкой (и, как я вижу, он прав, тип "ASP._Page_Currency_Index_cshtml" не наследуется от "System.Web.WebPages.WebPage".)

Что делать, чтобы HttpApplication знал, что эта страница должна управляться как System.Web.Mvc.WebViewPage вместо System.Web.WebPages.WebPage?

Я попытался переместить Views/Web.Config в папку bin, но это не помогает.

1 ответ

Попробуйте добавить это к AppSettings в Web.Config:

licensed under cc by-sa 3.0 with attribution.