最近正在学习ASP.NET MVC,由于时间原因以前的皮肤更换功能做了一半没有继续下去。这几天事情不多想把以前的项目完善一下,却遇到一个很奇怪的问题,有一套默认的皮肤是在默认的View文件夹下的,另外一套是在自己创建的Themes文件夹下的,在自定义主题的View页面里指定从ViewPage<T>继承时解析器老是报错,只要把它改为ViewPage就没事儿了。而在默认的View文件夹下无论指定哪一个都是可以正常解析的。
后来在网上找有没有人遇到相同的问题,基本找遍了网络也没找到,StackOverflow上的也没有明确的答案。第二天继续找,于是找到了一篇文章让我恍然大悟,这是那篇文章的地址:http://blog.163.com/xu_shuhao/blog/static/525774872010103053151529/
作者遇到的问题跟我的差不多,但背景完全不同。但却是同一原理。
解决办法:
在默认创建的Views文件夹里面会有一个Web.config文件,这里面有个结点叫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结点如下:
< 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吗?小弟抛砖引玉,请高人指教。
本文解决了ASP.NET MVC中自定义主题文件夹下ViewPage泛型继承时出现的解析错误问题,通过修改Web.config文件中的页面解析器设置,使得自定义主题能够正确解析。
800

被折叠的 条评论
为什么被折叠?



