Yod*_*oda 26 asp.net-mvc razor
什么是ViewBag.Title在ASP.NET MVC 4?
我有那个View文件:
@model IEnumerable<MvcMusicStore.Models.Genre>
@{
ViewBag.Title = "Store";
}
<h2>Index</h2>
Run Code Online (Sandbox Code Playgroud)
我不知道改变ViewBag.Title可能会做什么.
Jus*_*son 40
ViewBag是一个动态对象,这意味着你可以把任何你想要的东西放进去; ViewBag对象没有已定义的属性,直到你在其中放入一些东西.
该ViewBag.Title属性只是一个字符串对象.在这种情况下,它在视图中被用于实际定义的Title属性.如果您要查看_Layout.cshtml文件,您可能会看到以下内容:
<title>@ViewBag.Title</title>
Run Code Online (Sandbox Code Playgroud)
还记得在视图中定义属性的时候吗?最终呈现页面时,该属性最终出现在HTML标记中,如下所示:
<title>Store</title>
Run Code Online (Sandbox Code Playgroud)
哪个设置浏览器标题.
Cod*_*shi 10
ViewBag是一个动态对象,因此您可以在其上定义任何属性.在这种情况下@ViewBag.Title分配一个字符串.在_Layout.cshtml页面中,您将看到以下代码行:
<title>@ViewBag.Title</title>
Run Code Online (Sandbox Code Playgroud)
任何使用_Layout.cshtml布局的视图都会有一行代码如下:
@{
// This is setting the property to Hahaha
ViewBag.Title = "Hahaha";
}
Run Code Online (Sandbox Code Playgroud)
如果你这样做,那么最终你将完成(见红色圆圈)显示浏览器中页面标题的内容:
在你的一条评论中,你会问:
无论我想要什么,也意味着在其中放置一个复杂的对象?我知道这可以通过将对象传递给模型来完成,但这是可行的吗?
换句话说,你问你是否可以在Title房产中放置一个复杂的物体?是的,你可以这样做,但要记住改变_Layout.cshtml文件中的代码,否则它只会调用ToString()你的复杂对象并在浏览器标题中打印结果.但你为什么要这样做?我不建议.但是,你可以把任何东西放进去,因为它是动态的,但你必须正确地使用它.你甚至可以创建这样的其他属性:
ViewBag.SomeOtherProperty = new MyClass() {...};
Run Code Online (Sandbox Code Playgroud)
但是,传递模型要好得多,因为它可以为您提供编译器支持,并且您也可以获得智能.