2016-07-25 2 views
0

私のビューのデフォルトディレクトリを別のパスに移動しようとしています。MVC 5 ViewEngineパスのエラーを変更する:(ViewPageから派生する必要があります)ViewRootのWebConfigを使用しても

私はこれが私の新しいフォルダ構成の画像私が読ん

enter image description here

すべてであるこの

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" } 
     }); 
    } 

ように私のビューエンジンにディレクトリを追加するために私のGlobal.asaxを変更しました私は私のビューのルートフォルダにWeb設定を追加する必要があることがわかります。だから私は1つはテンプレートビューで来て、私は私の新しいフォルダの設定でそれを貼り付けてください。

これは私の/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に使用されると思われるクラスWebFormViewEngineを使用します。今では完璧に動作

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" } 
     }); 
    } 

:あなたは、クラスRazorViewEngine

を使用すると仮定されているビューレイザーのためので、私はちょうどこのように私の機能を変更する必要があります!

関連する問題