kfe*_*gen 5 asp.net-mvc viewengine razor
我目前有一个.net mvc3应用程序,负责管理多个位置的类似视图,这些位置也使用相同的控制器,例如site1/v1/views/index.cshtml和site1/v2/views/index.cshtml.
处理它的方法是创建一个继承自DefaultControllerFactory和CreateController方法的CustomControllerFactory,清除现有的视图引擎并添加一个新的自定义viewEngine,它根据当前url指定视图位置格式.
如果用户登陆site1.com/v1/index.cshtml,则视图引擎将指定以下视图位置:
string versionDirectory = "v1";
ViewLocationFormats = new[]{ versionDirectory + "/Views/{0}.cshtml",
"/Views/{0}.cshtml",
"~/Shared/{0}.cshtml"
};
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,如果多个用户在大致相同的时间落在不同的页面上,则所有用户都将看到相同的视图.
最初我认为这与缓存有关,但是在usecache = false自定义viewEngine中明确设置之后,似乎这与ViewEngines类不是线程安全有关.
有没有人对我如何能够以不同的方式实现相同的结果有任何想法?
提前致谢.
ViewEngines集合是一个静态集合,因此它的值在请求之间共享.你试图做的是可能的,但你做的方式是不正确的.
一种简单的方法是编写一个派生自RazorViewEngine的自定义视图引擎并覆盖FindView方法.每个请求调用一次该方法.在您的实现中,调用base.FindView然后修改结果(如果它不为null)以包含您需要的站点信息.
Scott Hanselman有一篇博文,展示了通过自定义视图引擎在另一个位置查看视图的示例.http://www.hanselman.com/blog/ABetterASPNETMVCMobileDeviceCapabilitiesViewEngine.aspx
| 归档时间: |
|
| 查看次数: |
1272 次 |
| 最近记录: |