2016-07-25 71 views
0

我嘗試將我的Views默認目錄移動到不同的路徑頂端。MVC 5更改ViewEngine路徑錯誤:(必須派生自ViewPage)即使使用視圖根中的WebConfig

我已經改變了我的Global.asax添加的目錄在我看來引擎這樣

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 

     RegisterViewEngines(ViewEngines.Engines); 
    } 

    private static void RegisterViewEngines(ICollection<IViewEngine> engines) 
    { 
     engines.Add(new WebFormViewEngine 
     { 
      //MasterLocationFormats = new[] { "~/App/Views/Admin/{0}.master" }, 
      PartialViewLocationFormats = new[] { "~/Mvc/Views/Shared/{1}/{0}.cshtml" }, 
      ViewLocationFormats = new[] { "~/Mvc/Views/{1}/{0}.cshtml" } 
     }); 
    } 

這是我的新文件夾配置

enter image description here

每一個地方我讀的圖像我看到我需要添加一個Web配置到我的Views根文件夾。所以我把模板視圖中出現的一個粘貼到我的新文件夾配置中。

這是我/Mvc/Views/Web.Config

<configuration> 
 
    <configSections> 
 
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
 
     <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
 
     <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
 
    </sectionGroup> 
 
    </configSections> 
 

 
    <system.web.webPages.razor> 
 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
 
     <namespaces> 
 
     <add namespace="System.Web.Mvc" /> 
 
     <add namespace="System.Web.Mvc.Ajax" /> 
 
     <add namespace="System.Web.Mvc.Html" /> 
 
     <add namespace="System.Web.Optimization"/> 
 
     <add namespace="System.Web.Routing" /> 
 
     <add namespace="Template" /> 
 
     </namespaces> 
 
    </pages> 
 
    </system.web.webPages.razor> 
 

 
    <appSettings> 
 
    <add key="webpages:Enabled" value="false" /> 
 
    </appSettings> 
 

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

 
    <system.web> 
 
    <compilation> 
 
     <assemblies> 
 
     <add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
 
     </assemblies> 
 
    </compilation> 
 
    </system.web> 
 
</configuration>

沒有母校什麼,我總是看到這個錯誤:

enter image description here 錯誤堆棧跟蹤

The view at '~/Mvc/Views/Login/Index.cshtml' must derive from ViewPage, ViewPage<TModel>, ViewUserControl, or ViewUserControl<TModel>.

Description : Une exception non gérée s'est produite au moment de l'exécution de la requête Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.InvalidOperationException: The view at '~/Mvc/Views/Login/Index.cshtml' must derive from ViewPage, ViewPage<TModel>, ViewUserControl, or ViewUserControl<TModel>.

+0

'〜/ Mvc/Views/Login/Index.cshtml'中的視圖必須來自ViewPage,ViewPage ,ViewUserControl或ViewUserControl 。 –

回答

0

我找到了我的解決方案,問題出在我的RegisterViewEngine函數中。

我使用假設用於文件.ascx的Class WebFormViewEngine。對於Razor視圖你想使用類RazorViewEngine

所以我只需要改變我的功能是這樣的:

private static void RegisterViewEngines(ICollection<IViewEngine> engines) 
    { 
     engines.Add(new RazorViewEngine 
     { 
      //MasterLocationFormats = new[] { "~/App/Views/Admin/{0}.master" }, 
      PartialViewLocationFormats = new[] { "~/Mvc/Views/Shared/{1}/{0}.cshtml" }, 
      ViewLocationFormats = new[] { "~/Mvc/Views/{1}/{0}.cshtml" } 
     }); 
    } 

現在,它完美地工作!

相關問題