ASP.NET MVC 4中的ViewBag.Title
是什么?
我有那个View文件:
@model IEnumerable<MvcMusicStore.Models.Genre>
@{
ViewBag.Title = "Store";
}
<h2>Index</h2>
我不知道改变ViewBag.Title
可能会做什么。
答案 0 :(得分:38)
来自ASP.NET site:
ViewBag是一个动态对象,这意味着你可以放任何你想要的东西 进去;在放置之前,ViewBag对象没有已定义的属性 里面的东西。
ViewBag.Title
属性只是一个字符串对象。在这种情况下,它在视图中用于实际定义 Title
属性。如果你要查看_Layout.cshtml
文件,你可能会看到类似的内容:
<title>@ViewBag.Title</title>
还记得在视图中定义属性的时候吗?最终呈现页面时,该属性最终会出现在HTML标记中,如下所示:
<title>Store</title>
设置浏览器标题。
答案 1 :(得分:9)
ViewBag
是一个动态对象,因此您可以在其上定义任何属性。在这种情况下,@ViewBag.Title
被分配了一个字符串。在_Layout.cshtml
页面中,您会看到以下代码行:
<title>@ViewBag.Title</title>
任何使用_Layout.cshtml
作为布局的视图都会有一行代码如下:
@{
// This is setting the property to Hahaha
ViewBag.Title = "Hahaha";
}
如果你这样做了,那么最终你将完成(见红色圆圈)在浏览器中显示页面标题的内容:
在你的一条评论中,你问:
我想要的是否也意味着要在其中放置一个复杂的对象?我知道这可以通过将对象传递给模型来完成,但这是可行的吗?
换句话说,你问是否可以在Title
属性中放置一个复杂的对象?是的,您可以执行此操作但请记住更改_Layout.cshtml
文件中的代码,否则只会在复杂对象上调用ToString()
并将结果打印在浏览器标题中。但你为什么要这样做?我不建议。但是,你可以把任何东西放进去,因为它是动态的,但你必须正确地使用它。你甚至可以创建这样的其他属性:
ViewBag.SomeOtherProperty = new MyClass() {...};
然而,传递模型要好得多,因为它为您提供了编译器支持,您也将获得智慧。