我使用在视图文件夹的子目录中搜索的 ViewEngine。在示例中,UserA 将获得来自 UserA 目录的视图,如果该目录不存在,它将获得普通视图。
如果 Views 目录看起来像:
Views
|-> Home
| |-> Index.cshtml
| |-> UserA
| |-> Index.cshtml
|-> Test
|-> Index.cshtml
然后,UserA 将从 Views/Home/UserA/Index.cshtml 中获取视图,而其他所有人将获取 Views/Home/Index.cshtml。包括 UserA 在内的每个人都将获得 /Views/Test/Index.cshtml 服务,因为没有针对 UserA 的特定服务。
public class MyViewEngine : WebFormViewEngine
{
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
ViewEngineResult result = null;
var request = controllerContext.HttpContext.Request;
if (UserA)
{
result = base.FindView(controllerContext, "UserA/" + viewName, masterName, useCache);
}
//Fall back to normal view if no other view has been selected
if (result == null || result.View == null)
{
result = base.FindView(controllerContext, viewName, masterName, useCache);
}
return result;
}
public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache)
{
ViewEngineResult result = null;
var request = controllerContext.HttpContext.Request;
if (UserA)
{
result = base.FindPartialView(controllerContext, "UserA/" + partialViewName, useCache);
}
//Fall back to normal view if no other view has been selected
if (result == null || result.View == null)
{
result = base.FindPartialView(controllerContext, partialViewName, useCache);
}
return result;
}
}