Подходы к обработке общих данных в представлениях ASP.NET MVC 3

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

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

  1. Установить значение в каждом контроллере (не DRY)
  2. Создать свою собственную базу контроллера, унаследованную от Controller, и установить значение в базовом классе
  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?

7
задан Greg 1 February 2011 в 20:57
поделиться