How to change default view location scheme in ASP.NET MVC?

前端 未结 5 471
甜味超标
甜味超标 2020-11-27 02:45

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

5条回答
  •  囚心锁ツ
    2020-11-27 03:40

    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);}
    }
    

提交回复
热议问题