public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache) { string controllerName = controllerContext.RouteData.GetRequiredString("controller"); object area; string viewArea = null; if (controllerContext.RouteData.DataTokens.TryGetValue("area", out area)) { viewArea = area as string; } var loc = PartialViewLocationFormats .Select(x => String.Format(x, partialViewName, controllerName, viewArea)) .FirstOrDefault(s => File.Exists(s.Replace("~/", MockVirtualPathFactory.BaseDirectory + "\\EPICCentral\\"))); if (loc == null) { return(new ViewEngineResult(ViewLocationFormats)); } else { var view = new MockView(MockVirtualPathFactory.NormalizePath(loc), loc, false, FileExtensions); return(new ViewEngineResult(view, this)); } }
public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache) { if (controllerContext == null) { throw new ArgumentNullException(nameof(controllerContext), "The controllerContext parameter is null"); } if (string.IsNullOrEmpty(partialViewName)) { throw new ArgumentException("The viewName parameter is null or empty.", nameof(partialViewName)); } if (controllerContext.Controller == null) { return(base.FindPartialView(controllerContext, partialViewName, useCache)); } var pluginName = controllerContext.Controller.ToControllerShortName(); if (string.IsNullOrEmpty(pluginName)) { return(base.FindPartialView(controllerContext, partialViewName, useCache)); } var cacheKey = $"{pluginName}|{partialViewName}"; if (useCache && ViewLocationCache != null) { var cachedLocation = ViewLocationCache.GetViewLocation(controllerContext.HttpContext, cacheKey); if (!string.IsNullOrEmpty(cachedLocation)) { return(new ViewEngineResult(CreatePartialView(controllerContext, cachedLocation), this)); } } string trimmedViewName; if (partialViewName.EndsWith(".cshtml") || partialViewName.EndsWith(".vbhtml")) { trimmedViewName = partialViewName.Remove(partialViewName.Length - 7); } else { trimmedViewName = partialViewName; } var args = new object[] { trimmedViewName, pluginName }; foreach (var location in PartialViewLocationFormats) { var path = string.Format(location, args); if (!FileExists(controllerContext, path)) { continue; } ViewLocationCache?.InsertViewLocation(controllerContext.HttpContext, cacheKey, path); return(new ViewEngineResult(CreatePartialView(controllerContext, path), this)); } return(new ViewEngineResult(PartialViewLocationFormats.Select(i => string.Format(i, args)))); }