Я очень новичок в MVC, и я обновляю приложение веб-формы для mvc. У меня есть общий макет (masterpage в webforms), я хотел бы установить информацию мета и заголовка для каждого представления, но я не вижу никаких вариантов для этого. спасибо за любую помощь.
Настройка заголовка страницы, метаинформации в представлении в asp.net mvc 4
Ответ 1
Как правило, в вашем макете у вас будет что-то вроде этого:
<!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 Title";
Layout = "~/Views/Shared/_Layout.cshtml";
}
Вы можете получить доступ к метаданным модели из ViewData.ModelMetadata
. В этом примере я перечисляю свойства модели и отображаю имена:
<ul>
@foreach (var property in ViewData.ModelMetadata.Properties)
{
<li>@property.PropertyName</li>
}
</ul>
Ответ 2
В вашем методе контроллера.
ViewData["Title"] = "this is page one title";
в вашем представлении, имейте это.
@ViewData["Title"])
Если заголовок html, он должен быть @html.raw(ViewData["TopMessage"])
Razor engine лучше для mvc, поэтому я рекомендую вам попробовать бритву при создании нового проекта. надеюсь, что это поможет вам.
Ответ 3
Мне нравится устанавливать названия страниц динамически, используя имена действий и контроллеров. Вы можете использовать библиотеку, например 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>
Ответ 4
Вам нужно установить Viewbag.Title
Эти статьи выглядят релевантными и дадут вам несколько указателей: