【问题标题】:How to group partial shared views for specified controllers?如何为指定的控制器分组部分共享视图?
【发布时间】:2009-08-28 08:10:39
【问题描述】:

是否可以告诉 ViewEngine 在其他文件夹中为指定的控制器查找部分共享视图(而 NOT 对于其他控制器)?

我正在使用 WebFormViewEngine。

这就是我的 PartialViewLocations 目前的样子。

 public class ViewEngine : WebFormViewEngine
    {
        public ViewEngine()
        {
            PartialViewLocationFormats = PartialViewLocationFormats
                .Union(new[]
                       {
                           "~/Views/{1}/Partial/{0}.ascx",
                           "~/Views/Shared/Partial/{0}.ascx"
                       }).ToArray();
        }

【问题讨论】:

    标签: asp.net-mvc directory partial-views viewengine


    【解决方案1】:

    当然。在这种情况下不要更改 PartialViewLocationFormats;相反,这样做:

        public override ViewEngineResult FindPartialView(
            ControllerContext controllerContext, 
            string partialViewName, 
            bool useCache)
        {
            ViewEngineResult result = null;
    
            if (controllerContext.Controller.GetType() == typeof(SpecialController))
            {
                 result = base.FindPartialView(
                     controllerContext, "Partial/" + partialViewName, useCache);
            }
    
            //Fall back to default search path if no other view has been selected  
            if (result == null || result.View == null)
            {
                result = base.FindPartialView(
                    controllerContext, partialViewName, useCache);
            }
    
            return result;  
        }
    

    【讨论】:

    • 现在只需要使用控制器的过滤器来调整它 - 例如 [AddPartialViewLocation("Shared/SuperFolder")]。你怎么看 - 这是个好主意/坏主意?
    • 我可能会使用 IDictionary>。然后你可以获得一个可枚举的路径列表来探测任意数量的控制器类型。上面的方法会检查当前控制器类型是否在字典中(w/TryGetValue),如果找到,则按顺序探测该类型的路径。
    • 您似乎同意这不是一个坏主意。感谢您提供一些实施想法。
    • 在一定范围内这不是一个坏主意。例如,我们这样做是为了为手机设备提供特殊视图,但同样的规则适用于所有控制器。但是,如果每个控制器对视图都有不同的探测路径,那么对于试图维护您的项目的人来说,这可能会非常混乱。在我们的例子中,我敢打赌,任何在视图中看到“Mobile”子文件夹的开发人员都能弄清楚它的用途。所以请谨慎选择您的规则!
    • 最近 - 遇到了一些问题。就像其他一些自定义一样。但毕竟 - 不是那么糟糕,我喜欢它。非常灵活。
    猜你喜欢
    • 1970-01-01
    • 2017-11-18
    • 2015-02-06
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    相关资源
    最近更新 更多