Beispiel #1
0
        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))));
        }