sor*_*rke 24 razor viewbag asp.net-mvc-3
默认情况下,ASP.NET MVC 3的新项目模板将以下内容添加到默认布局(razor中的母版页):
<title>@ViewBag.Title</title>
Run Code Online (Sandbox Code Playgroud)
然后,视图必须包含以下内容以分配页面标题,例如:
@{
ViewBag.Title = "Log On";
}
Run Code Online (Sandbox Code Playgroud)
也许这只是我自己的偏好,但我发现使用ViewBag来保持标题有点不对(我想的是太多魔术字符串的味道).所以我的问题是:对于使用ASP.NET MVC 3和razor(使用动态属性包)的人来说,这是推荐的最佳实践吗?或者你选择了更强类型的东西(可能涉及自定义基类?)
Pra*_*sad 26
我不认为asp.net MVC 3附带的默认标题处理功能有什么不好,没关系.
我个人这样做(下面写的)处理标题,我不支持下面的代码或说它比默认功能更好,它只是一个偏好.
主
<title>
@RenderSection("Title");
</title>
Run Code Online (Sandbox Code Playgroud)
视图
@section Title
{
write title
}
Run Code Online (Sandbox Code Playgroud)
有一点我可以建议改进默认功能
@{
string pageTitle = @ViewBag.Title ?? "Title Not Set";
}
<title>@pageTitle</title>
Run Code Online (Sandbox Code Playgroud)
因此,每当您忘记在viewbag中添加它时,页面将显示title = Title Not Set
创建基类然后使所有控制器继承自该基类也可以完成.但我认为它带来了太多的痛苦title.
标题的ViewBag非常好(我甚至说它是ViewBag的目的) - 动态不是绝对的邪恶."标题"是众所周知的,不太可能改变甚至在视图模板中预定义.我个人使用以下标题:
<title>@(ViewBag.Title == null ? string.Empty : ViewBag.Title + " | ")Site Name</title>
Run Code Online (Sandbox Code Playgroud)
如果您担心ViewBag.Title错误输入,可以通过创建自定义来使其成为强类型,WebViewPage但您仍然必须使用ViewBag或者可能HttpContext.Items在强类型属性中使用,因为WebViewPage在渲染IIRC期间会创建多个实例.
我建议坚持ViewBag,创造自己,WebViewPage因为这似乎有点矫枉过正 - 如果你已经拥有自定义,即使在它上面创建单一属性也WebViewPage只是毫无价值的并发症 - 而且这来自于经常过度工程的人.