Xam*_*Dev 3 c# asp.net-mvc asp.net-core-mvc asp.net-core-1.0
我想从自定义位置渲染视图,所以为此我IViewLocationExpander
在类中实现了
接口.我已startup file
按如下方式注册了同一课程.
Startup.cs文件
public void ConfigureServices(IServiceCollection services)
{
.....
//Render view from custom location.
services.Configure<RazorViewEngineOptions>(options =>
{
options.ViewLocationExpanders.Add(new CustomViewLocationExpander());
});
....
}
Run Code Online (Sandbox Code Playgroud)
CustomViewLocationExpander类
public class CustomViewLocationExpander : IViewLocationExpander
{
public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
{
var session = context.ActionContext.HttpContext.RequestServices.GetRequiredService<SessionServices>();
string folderName = session.GetSession<string>("ApplicationType");
viewLocations = viewLocations.Select(f => f.Replace("/Views/", "/" + folderName + "/"));
return viewLocations;
}
public void PopulateValues(ViewLocationExpanderContext context)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序视图结构如下
我的问题是,如果我ViewsFrontend
从URL http:// localhost:56739/trainee/Login/myclientname访问文件夹中
的Views/Login视图,并立即将浏览器中的url更改为http:// localhost:56739/admin/Login/myclientname,那么在这种情况下它仍然引用ViewsFrontend
文件夹,它应该引用ViewsBackend
文件夹.
有实习生的网址应该引用ViewsFrontend
文件夹,管理员应该参考ViewsBackend
文件夹.
在浏览器中更改URL后,它只调用PopulateValues
方法而不是ExpandViewLocations
方法.
那么如何重新配置这个类来为其他文件夹工作呢?
谢谢您的帮助 !
PopulateValues
作为一种指定参数的方式存在,您的视图查找将根据每个请求而变化.由于您没有填充它,因此视图引擎使用先前请求中的缓存值.将应用程序类型添加到PopulateValues并应调用ExpandValues:
public class CustomViewLocationExpander : IViewLocationExpander
{
public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
{
string folderName = context.Values["ApplicationType"];
viewLocations = viewLocations.Select(f => f.Replace("/Views/", "/" + folderName + "/"));
return viewLocations;
}
public void PopulateValues(ViewLocationExpanderContext context)
{
var session = context.ActionContext.HttpContext.RequestServices.GetRequiredService<SessionServices>();
string applicationType = session.GetSession<string>("ApplicationType");
context.Values["ApplicationType"] = applicationType;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3259 次 |
最近记录: |