21

我对 MVC 很陌生,我正在将 Web 表单应用程序更新为 mvc。我有一个共享布局(网络表单中的母版页),我想为每个视图设置元和标题信息,但我看不到任何选项。谢谢你的帮助。

4

4 回答 4

53

通常,在您的布局中,您将拥有如下内容:

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

重要的部分是@ViewBag.Title。这一点剃刀语法编码并写入ViewBag.Title. 是所有 razor 视图上的属性,它是使用字典作为其后备存储ViewBag的动态类型 。只是一个字典,您可以在其中存储要在视图中使用的随机内容。ViewDataViewData

在您的控制器、布局或视图中,您可以获取或设置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>
于 2012-09-25T15:31:45.980 回答
6

在您的控制器方法中。

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

在你看来,有这个。 @ViewData["Title"])

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

Razor 引擎更适合 mvc,因此我建议您在创建新项目时尝试使用 razor。希望它对你有帮助。

于 2012-09-25T21:10:20.807 回答
4

我喜欢使用动作和控制器名称动态设置页面标题。您可以使用Humanizer之类的库将“SomeActionName”转换为“Some action name”:

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>
于 2015-05-17T23:26:32.507 回答
0

您需要设置Viewbag.Title 这些文章看起来相关,并会给您一些指示:

于 2012-09-25T15:33:21.080 回答