MVC 5更改ViewEngine路径错误:(必须从ViewPage派生),即使在View Root中使用WebConfig也是如此

时间:2016-07-25 02:41:19

标签: asp.net-mvc view web-config razorengine

我尝试将我的Views默认目录移到另一条路径上。

我已经更改了我的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

我读到的每个地方都看到我需要在我的Views根文件夹中添加一个web配置。所以我把模板视图中的一个放入我的新文件夹配置中。

这是我的/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 错误堆栈跟踪

  

'〜/ Mvc / Views / Login / Index.cshtml'中的视图必须来自ViewPage,ViewPage&lt; TModel&gt;,ViewUserControl或ViewUserControl&lt; TModel&gt;。

     

描述:Une例外非géréess'estproduite au moment de l'exécutiondelarequêteWebactuelle。 Contrôlezlatrace de la pile pour plus d'informations sur l'erreur et son origine dans le code。

     

Détailsdel'exception:System.InvalidOperationException:'〜/ Mvc / Views / Login / Index.cshtml'中的视图必须从ViewPage,ViewPage&lt; TModel&gt;,ViewUserControl或ViewUserControl&lt; TModel&gt;派生。

1 个答案:

答案 0 :(得分:0)

我找到了我的解决方案,问题出在我的RegisterViewEngine函数中。

我使用类WebFormViewEngine,假设用于文件.ascx。对于Razor视图,您可以使用Class 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" }
        });
    }

现在它完美无缺!

相关问题