I want to change view locations at runtime based on current UI culture. How can I achieve this with default Web Form view engine?
Basically I want to know how implem
1) Extend the class from razor view engine
public class LocalizationWebFormViewEngine : RazorViewEngine
2) Add the partial location formats
public LocalizationWebFormViewEngine()
{
base.PartialViewLocationFormats = new string[] {
"~/Views/{2}/{1}/{0}.cshtml",
"~/Views/{2}/{1}/{0}.aspx",
"~/Views/{2}/Shared/{0}.cshtml",
"~/Views/{2}/Shared/{0}.aspx"
};
base.ViewLocationFormats = new string[] {
"~/Views/{2}/{1}/{0}.cshtml",
"~/Views/{2}/{1}/{0}.aspx",
"~/Views/{2}/Shared/{0}.cshtml",
"~/Views/{2}/Shared/{0}.aspx"
};
}
3) Create the override method for partial view render
public override ViewEngineResult FindPartialView(ControllerContext controllerContext, String partialViewName, Boolean useCache)
{
if (controllerContext == null)
{
throw new ArgumentNullException("controllerContext");
}
if (String.IsNullOrEmpty(partialViewName))
{
throw new ArgumentException("partialViewName");
}
string[] partialViewLocationsSearched;
string controllerName = controllerContext.RouteData.GetRequiredString("controller");
string partialPath = GetPath(controllerContext, PartialViewLocationFormats, "PartialViewLocationFormats", partialViewName, controllerName, _cacheKeyPrefix_Partial, useCache, out partialViewLocationsSearched);
return new ViewEngineResult(CreatePartialView(controllerContext, partialPath), this);}
}