Подтвердить что ты не робот

Настройка заголовка страницы, метаинформации в представлении в asp.net mvc 4

Я очень новичок в MVC, и я обновляю приложение веб-формы для mvc. У меня есть общий макет (masterpage в webforms), я хотел бы установить информацию мета и заголовка для каждого представления, но я не вижу никаких вариантов для этого. спасибо за любую помощь.

4b9b3361

Ответ 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>