Razor中的ViewBag.Title是什么?

时间:2014-06-22 17:50:07

标签: asp.net-mvc razor

ASP.NET MVC 4中的ViewBag.Title是什么?

我有那个View文件:

@model IEnumerable<MvcMusicStore.Models.Genre>

@{
    ViewBag.Title = "Store";
}

<h2>Index</h2>

我不知道改变ViewBag.Title可能会做什么。

2 个答案:

答案 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"; 
}

如果你这样做了,那么最终你将完成(见红色圆圈)在浏览器中显示页面标题的内容:

enter image description here

在你的一条评论中,你问:

  

我想要的是否也意味着要在其中放置一个复杂的对象?我知道这可以通过将对象传递给模型来完成,但这是可行的吗?

换句话说,你问是否可以在Title属性中放置一个复杂的对象?是的,您可以执行此操作但请记住更改_Layout.cshtml文件中的代码,否则只会在复杂对象上调用ToString()并将结果打印在浏览器标题中。但你为什么要这样做?我不建议。但是,你可以把任何东西放进去,因为它是动态的,但你必须正确地使用它。你甚至可以创建这样的其他属性:

ViewBag.SomeOtherProperty = new MyClass() {...};

然而,传递模型要好得多,因为它为您提供了编译器支持,您也将获得智慧。