代码之家  ›  专栏  ›  技术社区  ›  rony l

谁应该知道Asp.NetMVC中的页面标题?

  •  6
  • rony l  · 技术社区  · 11 年前

    模型、视图或控制器应该知道页面标题吗?

    选项1

    使用模型存储页面标题(这使模型更像视图模型):

    public class SomeModel
    {
        string Title { get; set; }
    }
    

    然后视图可以简单地相应地设置标题

    <title>@Model.Title</title>
    

    选项2

    视图知道自己的标题:

    @{
         ViewBag.Title = "Some Title";
    }
    

    以及视图中的某个位置或使用的默认布局:

    <title>@ViewBag.Title</title>
    

    选项3

    从控制器设置标题

    ViewBag.Title = "Some Title"
    

    然后从视图中使用它

    <标题>@ViewBag.Title</标题>
    

    哪种方法是最好的(假设我对不同的页面有一个共同的布局)?

    3 回复  |  直到 11 年前
        1
  •  2
  •   tucaz    11 年前

    这取决于。如果所有的标题都有些不同,而且是静态的,我认为每个视图都没有问题,“知道”它的标题。

    然而,如果你需要模型中的信息来构成标题,那么你必须……呃。。。从模型传递它,这并不意味着您需要“Title”属性,而是可以使用模型本身的某些属性,例如ProductName或其他任何属性。

        2
  •  1
  •   ChaseMedallion    11 年前

    这取决于你的设计。例如,如果您有一个用于显示搜索结果的通用视图,则可能希望标题与用户搜索的内容相关。在这种情况下,它可能会在模型中结束。

    另一方面,如果您有一个非常特定的视图(例如用户配置文件页面),那么让视图控制它自己的标题更有意义。在这种情况下,对于一个模型类型,您可能有多个视图(例如,用户的主页视图和紧凑的配置文件视图),因此视图将驱动UI细节,而模型将仅驱动UI后面的数据。

    这两种方法都很有用(您可以在一个应用程序中找到两者)。

    另一个可能推动这一决定的因素是您的工程过程是如何工作的。例如,如果视图主要由关注外观的前端工程师编辑,那么最好将视图限制为渲染HTML之类的内容。另一方面,如果视图倾向于由用户体验设计师处理,他们更全面地关注措辞和应用领域等问题,那么将这些关注点委托给视图可能更有意义。

        3
  •  1
  •   aw04    11 年前

    我总是从在视图中定义这一点开始,只有在您有理由这样做时才将其移出(具有相同标题的多个视图、动态创建的标题等)。

    如果你想在其他地方定义它,那真的取决于你为什么要在哪里定义它。例如,如果要由多个视图使用,您可能不想在视图模型中定义它。

    我认为这个问题没有正确或错误的答案,更多取决于你需要什么。