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

时间:2014-03-08 14:37:30

标签: c# asp.net-mvc razor

Model,View或Controller是否应该知道页面标题?

选项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"

然后从视图中使用它

<title>@ViewBag.Title</title>

哪种方法最好(假设我有不同页面的通用布局)?

3 个答案:

答案 0 :(得分:2)

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

但是,如果您需要模型中的信息来构成标题,那么您必须......错误...从模型中传递它并不意味着您需要“标题”属性而是您可以使用Model本身的某些东西,比如ProductName或其他任何东西。

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:1)

我总是首先在视图中定义它,并且只在你有理由这样做时才会移出它(具有相同标题的多个视图,动态创建的标题等)。

如果您要在别处定义它,它实际上取决于您定义它的位置。做有意义的事情。例如,如果要由多个视图使用它,您可能不希望在视图模型中定义它。

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