2012-09-25 44 views

回答

32

通常,在你的布局,你就会有这样的事情:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>@ViewBag.Title</title> 
    <!-- the rest omitted for brevity --> 

的重要组成部分,是@ViewBag.Title。这位剃刀语法编码并写入ViewBag.Title的值。 ViewBag是对动态类型的所有剃须刀视图的属性,它使用ViewData字典作为其后备存储。 ViewData只是一个字典,您可以随意存储想要在视图中使用的东西。

在您的控制器,布局或视图中,您可以获取或设置ViewBag.Title。下面是如何设置它在使用你的布局(称为_Layout.cshtml在此例)的图为例:

@{ 
    ViewBag.Title = "My View's Title"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

您可以从ViewData.ModelMetadata访问模型的元数据。在这个例子中,我列举了该模型的性能和显示名称:

<ul> 
@foreach (var property in ViewData.ModelMetadata.Properties) 
{ 
    <li>@property.PropertyName</li> 
} 
</ul> 
+0

我用同样的方法来设置meta标签 – Kate

4

在你的控制器的方法。

ViewData["Title"] = "this is page one title";

在您看来,有这样的。 @ViewData["Title"])

如果标题是HTML,它应该是@html.raw(ViewData["TopMessage"])

剃刀引擎是MVC更好,所以我建议你尝试剃须刀,当你创建一个新项目。希望它能帮助你。

1

我喜欢使用操作和控制器名称动态设置页面标题。您可以使用库像Humanizer为“SomeActionName”转换成“有些动作名称”:

public static class HtmlHelperExtensions 
{ 
    public static MvcHtmlString GetPageTitle(this HtmlHelper helper) 
    { 
     var actionName = helper.GetRouteDataValue("action"); 
     var controllerName = helper.GetRouteDataValue("controller"); 

     return new MvcHtmlString(controllerName.Humanize() + " - " + actionName.Humanize()); 
    } 

    private static string GetRouteDataValue(this HtmlHelper helper, string value) 
    { 
     return helper.ViewContext.RouteData.Values[value].ToString(); 
    } 
} 

,然后在_layout:

<title>@Html.GetPageTitle()</title>