Альтернатива ViewBag.Title в ASP.NET MVC 3

По умолчанию новый шаблон проекта для ASP.NET MVC 3 добавляет следующее к макету по умолчанию (мастер-страница в razor):

<title>@ViewBag.Title</title>

Представление должно содержать следующее, например, для присвоения заголовка страницы:

@{
     ViewBag.Title = "Log On";
}

Возможно, это просто мое личное предпочтение, но я считаю, что использование ViewBag для хранения заголовка немного неправильно (я слишком много думать об аромате волшебной струны). Итак, мой вопрос: рекомендуется ли это для людей, использующих ASP.NET MVC 3 и razor (с использованием пакета динамических свойств), или вы выбираете что-то более строго типизированное (возможно, с использованием пользовательского базового класса?)

24
задан soren.enemaerke 8 August 2011 в 08:48
поделиться

2 ответа

Я бы сказал, что, если вы хотите установить только заголовок, можно использовать ViewBag. Ну, может быть, не только - максимум 2-3 свойства.

Но если вы начнете видеть, что вы устанавливаете все больше и больше (общих) свойств в каждом действии контроллера, я бы использовал строго типизированный «класс ViewModelBase». Но это только я.

1
ответ дан 28 November 2019 в 23:33
поделиться

Нет ничего плохого в использовании ViewBag.Title = "My Title";

Все, что вы делаете, это используете динамическое свойство.

Вопрос на самом деле, где информация должна быть «объявлена».

Т.е., где он наиболее доступен для текущих целей.

Если это для каждой страницы, то это правильное место.

Если, однако, заголовок страницы может быть получен из Модели, то вам следует это сделать.

В этом случае я бы, вероятно, использовал базовый класс для используемой вами ViewModel и создал там свойство PageTitle, содержащее логику для получения заголовка страницы из свойств в модели.

Итак:

<title>Model.PageTitle</title>

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

1
ответ дан 28 November 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: