我是MVC的新手,我正在将一个Web表单应用程序更新为mvc。我有一个共享布局(webforms中的母版页),我想为每个视图设置元和标题信息,但我看不到这个选项。谢谢你的帮助。
答案 0 :(得分:41)
通常,在您的布局中,您将拥有以下内容:
<!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>
答案 1 :(得分:4)
在你的控制器方法中。
ViewData["Title"] = "this is page one title";
在你看来,有这个。
@ViewData["Title"])
如果title是html,则应为@html.raw(ViewData["TopMessage"])
Razor引擎对于mvc更好,所以我建议你在创建一个新项目时尝试使用剃须刀。希望对你有所帮助。
答案 2 :(得分:2)
我喜欢使用操作和控制器名称动态设置页面标题。您可以使用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>
答案 3 :(得分:0)
您需要设置Viewbag.Title
这些文章看起来很相关,并会给你一些指示: