未能加载类型“System.Web.Mvc.ViewPage<String>”

    最近正在学习ASP.NET MVC,由于时间原因以前的皮肤更换功能做了一半没有继续下去。这几天事情不多想把以前的项目完善一下,却遇到一个很奇怪的问题,有一套默认的皮肤是在默认的View文件夹下的,另外一套是在自己创建的Themes文件夹下的,在自定义主题的View页面里指定从ViewPage<T>继承时解析器老是报错,只要把它改为ViewPage就没事儿了。而在默认的View文件夹下无论指定哪一个都是可以正常解析的。

后来在网上找有没有人遇到相同的问题,基本找遍了网络也没找到,StackOverflow上的也没有明确的答案。第二天继续找,于是找到了一篇文章让我恍然大悟,这是那篇文章的地址:http://blog.163.com/xu_shuhao/blog/static/525774872010103053151529/
作者遇到的问题跟我的差不多,但背景完全不同。但却是同一原理。

解决办法:

在默认创建的Views文件夹里面会有一个Web.config文件,这里面有个结点叫pages 如下:

<pages
        
validateRequest="false"
        pageParserFilterType
="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType
="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType
="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>

    </pages> 

    其中pageParserFilterType指定了页面解析器。而我们知道在ASP.NET中加载Web.config文件是从外到内的,最后使用的是最内层的配置文件,所以在访问默认的Views文件夹中的视图时加载的便是此文件夹下的配置文件。而在访问自定义Themes文件夹中的视图时,使用的配置文件是外面站点的Web.config,而这个配置文件的pages结点如下:

<pages validateRequest="false" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
<namespaces>
                <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.Linq"/>
                <add namespace="System.Collections.Generic"/>
            </namespaces>

        </pages>

    里面并没用指定解析器。所以应该是使用的默认解析器,当我把上面的解析器同样加进去后就可以正常工作了,但是这默认的解析器是哪个呢?解析asp.net webform的吗?那就是aspnet_compiler.exe吗?小弟抛砖引玉,请高人指教。

原文地址:https://www.cnblogs.com/mike442144/p/2752688.html