Глобальные переменные в Razor View Engine - PullRequest
5 голосов
/ 04 марта 2011

Есть ли способ для меня использовать функциональность, аналогичную так называемой Глобальные переменные в Spark View Engine, но для Razor.

Смысл всего этого в том, чтобы бытьвозможность определить переменную в одном разделе для заголовка, а затем установить или изменить значение этой переменной позже в другом разделе.

В Spark вы создадите переменную в виде раздела, подобном этому(неполный код для примера):

<html>
  <head>
    <global type='string' Title='"Site Name"'/>
    <title>${Title}</title>
  </head>
  <body>
    <div><use content="view"/></div>
  </body>
</html>

А затем вы можете установить его в другом представлении или разделе или в любом другом месте:

<set Title='product.Name + " - " + Title'/>

Как бы я поступил так, как этов Razor или просто решить похожую проблему, если у меня неправильный подход?

1 Ответ

7 голосов
/ 04 марта 2011

Вы можете использовать ViewBag.Title внутри макета:

<html>
  <head>
    <title>@ViewBag.Title - Site Name</title>
  </head>
  <body>
    <div>
        @RenderBody()
    </div>
  </body>
</html>

и затем определите эту переменную внутри представления:

@model AppName.Models.Product
@{
    ViewBag.Title = Model.Name;
}

UPDATE:

Следуя комментариям по поводу значений по умолчанию, вы можете использовать разделы.

<html>
  <head>
    <title>
    @if (IsSectionDefined("Title"))
    {
        RenderSection("Title")
    }
    else 
    {
        <text>Some default title</text>
    }
    </title>
  </head>
  <body>
    <div>
        @RenderBody()
    </div>
  </body>
</html>

и затем внутри вашего представления вы можете переопределить раздел, если хотите:

@section Title {
    <text>some redefined title here</text>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...