Я использую 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;
}
}