Подходы для обработки общих данных в представлениях ASP.NET MVC 3 - PullRequest
7 голосов
/ 01 февраля 2011

Я борюсь с тем, что кажется очень простой концепцией.Если у меня есть значение в ViewBag, предназначенное для использования моим _Layout.cshtml, как и где мне установить это значение?

Вот наиболее очевидные (для меня) варианты, которые я вижу в данный момент:

  1. Установите значение в каждом контроллере (не DRY)
  2. Создайте свою собственную базу контроллеров, наследующую от контроллера, и установите значение в базовом классе
  3. Установите значение в Global.asax.cs (чувствует себя грязным)
  4. Создать ActionFilter, чтобы установить данные и зарегистрировать фильтр глобально (также чувствует себя неправильно)
  5. Установить значение в _ViewStart.cshtml (чувствует себя ОЧЕНЬ неправильно и ОЧЕНЬгрязный)

Например:

_Layout.cshtml


<!DOCTYPE html>
<html>
<head runat="server">
    <title>@ViewBag.Title</title>
</head>
<body>
    <div id="header">
       <h1>Welcome @ViewBag.UserName</h2>
    </div>
    <div id="content">
       @RenderBody()
    </div>
</body>
</html>

Если каждый контроллер устанавливает значение UserName, этоне ужасно СУХОЙ.Если бы я занимался этим с помощью CodeIgniter, я бы просто создал свой собственный базовый контроллер для обработки этих общих элементов и пошел своим путем.Есть ли более предпочтительный вариант с ASP.NET MVC 3?

Ответы [ 2 ]

10 голосов
/ 02 февраля 2011

Модель общего вида и базовый контроллер - это путь IMO. Используйте общую модель представления в качестве базового класса для всех ваших моделей представления. Используйте метод OnActionExecuted в базовом контроллере, чтобы получить модель представления (для действия, возвращающего представление) и привести его к модели общего представления. Установите общие свойства в то время.

0 голосов
/ 24 февраля 2011

Допустим, я хочу, чтобы ViewBag.PageHeight имел значение по умолчанию 1000 для всех страниц, но затем разрешил его переопределить любой страницей / представлением.Вот что я вставил в _Layout.cshtml:

Высота страницы равна @ (ViewBag.PageHeight ?? 1000)

Кажется, это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...