在MVC 3中的多个位置搜索.cs.html
本文关键字:位置 搜索 cs html MVC | 更新日期: 2023-09-27 18:00:09
当用户来到我的网站时,查询字符串中可能传递了一个template=foo
。正在验证该值并将其存储在Session
中。
我的文件布局如下:
- Views/
- Templates/
- test1/
- Home
- Index.cshtml
- test2/
- Home
- List.cshtml
- Home/
- Index.cshtml
基本上,如果用户使用template=test1
请求Index
,我希望使用Views/Templates/test1/Index.cshtml
。如果他们有template=test2
,我想使用Views/Home/Index.cshtml
(因为/Views/Templates/test2/Home/Index.cshtml
不存在)。如果他们没有传递模板,那么它应该直接进入Views/Home
。
我是MVC和.NET的新手,所以我不知道从哪里开始寻找。我使用MVC3和Razor作为视图引擎。
您可以通过创建自定义RazorViewEngine并设置ViewLocationFormats
属性来实现这一点。这里有一个示例通过覆盖WebFormViewEngine
来实现这一点,但使用RazorViewEngine
也应该同样有效:
public class CustomViewEngine : WebFormViewEngine
{
public CustomViewEngine()
{
var viewLocations = new[] {
"~/Views/{1}/{0}.aspx",
"~/Views/{1}/{0}.ascx",
"~/Views/Shared/{0}.aspx",
"~/Views/Shared/{0}.ascx",
"~/AnotherPath/Views/{0}.ascx"
// etc
};
this.PartialViewLocationFormats = viewLocations;
this.ViewLocationFormats = viewLocations;
}
}
您可以根据需要修改Scott Hanselman的移动设备演示。不用检查用户代理,或者如果它是移动设备,你可以把你的逻辑放进去检查查询字符串或会话变量。