Проблема с заголовком страницы при установке переменной ViewBag из секции бритвы в asp.net mvc - PullRequest
0 голосов
/ 15 апреля 2011

Рассмотрим следующую декларацию

@section sideaction
{
  ...
  ViewBag.Title=Model.Title;
  ...
}

И в основном макете у меня есть

<head>
    <title> @ViewBag.Title</title>
....
...
</head>
..
...
<body>
..
 @RenderSection("sideaction",required:false)
..
</body>

Я не получаю заголовок из представления, я знаю, что представление будет обработано до макета, но я узнал, что заголовок обрабатывается перед разделом рендеринга, что вызывает эту проблему. Еще одна вещь, ViewBag.Title = Model.Title - это просто пример, настоящая Модель - это объект IEnumrable, и я повторяю и нахожу правильный заголовок. Я могу выполнить итерации в контроллере, чтобы найти заголовок, но уже есть итерация в поле зрения. Для больших коллекций одна итерация более эффективна. Есть идеи?

Ответы [ 2 ]

3 голосов
/ 15 апреля 2011

Вы не можете установить значение ViewBag в разделе.

Используйте это:

@{
    ViewBag.Title = Model.Title;
}

непосредственно в представлении для установки заголовка.

0 голосов
/ 07 октября 2011

Даже если это не работает, обратите внимание, что код должен быть таким:

@section sideaction
{
    @{
       ViewBag.Title = Model.Title;
    }
}

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

@{
    ViewBag.Title = Model.Title;
}

Кстати, если вы продолжаете изменять заголовок страницы внутри раздела, используйте javaScript / jQuery, например:

@section sideaction
{
    <script type="text/javascript">
        $(function () {
            document.title = '@Model.Title';
        });
    </script>
}

Примечание: обратите внимание, что это должен быть '@ Model.Title' (внутри кавычек).

...