asp.net mvc 用自定义的RazorViewEngine实现主题的自由切换遇到的问题!
这个问题纠结了我好几天了,虽然没彻底明白,只是稍有所进展,记录下,如果有能详细解答的请不吝赐教。
开篇: 熟悉mvc的同学都明白controller以及里面的action会默认对应views里面的文件,从而把controller里面的内容传递到页面,展示到浏览器上。如下图就是一个原始的mvc3项目里默认的Views里的结构
如果我们想做另一套风格的页面主题,并且能够实现跟上面自带的这套风格自由切换,简单理解就是仿照Views下面的目录结构再做与其并列的一套。如下所是目录结构:
我们在Views下添加了Themes文件,下面分为default与green,default里面是原来的文件,green里面是我们自己写的另外一套风格的文件。
接下来就用到本文标题写的RazorViewEngine类了,继承RazorViewEngine类去自定义试图引擎来实现default与green这两套主题的切换。(具体的操作到园子里找找吧,有很多文章写过了,我不啰嗦了,下面主要是写我自己遇到的问题)
问题: 在default与green里面我放了Content,用来写css文件与js文件,因为两个主题所用的不一样,放在这里分开调用也是最直观的解决方式了。但是问题出现了,通过自定义的视图引擎能够顺利切换default与green加载里面的Account、Home、Shared文件夹,但是当里面的页面link标签加载Content文件夹下的样式时会出现404。
在chrome F12的调试窗口中,请求Content中的文件后的status是canceled。
查了很多资料仍没有满意的接到,有一个回答说是跨站访问的原因,总是还是一头雾水。
不过尝试了很多次总算发现Content文件夹放置的位置不对!只要把他拿出来便能顺利调用了。
最后我在项目根目录下放Conent,在里面分别建立default与green来区分不同的样式文件,这样总算能完成主题的自由切换功能了。
功能是完成了,但为什么Content不能放在视图引擎管理的Views下还是很不解 *_*