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