【问题标题】:Is there a way to set convention when returning a partial view返回部分视图时有没有办法设置约定
【发布时间】:2010-08-27 08:37:46
【问题描述】:

有没有办法在返回局部视图时设置约定?例如: 我有以下内容:

HomeController ---> Home(action Method) --> _Home.ascx (partial view)

AboutController ---> About(action Method) --> _About.ascx (partial view)

我目前正在将局部视图名称显式传递给 PartialView 助手(即返回 PartialView("_home");)

注意:不使用 T4MVC。

谢谢

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2


    【解决方案1】:

    负责将视图名称映射到正确文件的 MVC 运行时组件称为 ViewEngine。对于 ascx 文件,它是默认的 WebFormViewEngine。它公开了包含默认查找模式的属性。例如,您可以修改 PartialViewLocationFormats 而不是这个:

    "~\Views\{1}\{0}.ascx"
    "~\Views\Shared\{0}.ascx"
    

    变成这样:

    "~\Views\{1}\_{0}.ascx"
    "~\Views\Shared\_{0}.ascx"
    

    请注意,此更改将应用​​于您的所有局部视图查找。

    【讨论】:

    • 不错!这导致我将 webviewformengine 的 FindPartialView 方法覆盖为 string.Format("_{0}",partialView)
    【解决方案2】:

    我相信您应该始终明确地传递部分视图名称,因为文件 ViewEngineCollection.cs 中搜索它的代码会引发异常:

    public virtual ViewEngineResult FindPartialView(ControllerContext controllerContext,
        string partialViewName) 
    {
        // skipped code
    
        if (string.IsNullOrEmpty(partialViewName)) 
        {
            throw new ArgumentException(MvcResources.Common_NullOrEmpty,
                "partialViewName");
        }
    
        // skipped code
    }
    

    虽然如果你重写这个方法,你可能会使用一些命名约定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 2022-01-17
      • 2021-01-29
      相关资源
      最近更新 更多