Я борюсь с тем, что кажется очень простой концепцией.Если у меня есть значение в ViewBag, предназначенное для использования моим _Layout.cshtml, как и где мне установить это значение?
Вот наиболее очевидные (для меня) варианты, которые я вижу в данный момент:
- Установите значение в каждом контроллере (не DRY)
- Создайте свою собственную базу контроллеров, наследующую от контроллера, и установите значение в базовом классе
- Установите значение в Global.asax.cs (чувствует себя грязным)
- Создать ActionFilter, чтобы установить данные и зарегистрировать фильтр глобально (также чувствует себя неправильно)
- Установить значение в _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?