У меня есть файл макет мастер, что все мои взгляды визуализируются в Я хотел бы показать сообщение для пользователей в определенной области этого макета, используя следующие правила:.Динамически добавлять содержимое в макет в MVC4
- В течение нашего периода обслуживания покажите предупреждение на каждой странице после входа пользователя.
- Рядом с нашим периодом обслуживания выведите предупреждение на каждой странице после того, как пользователь выполнил вход (но с другим контентом, чем # 1)
- В течение обычных периодов покажите сообщение только после входа, но не для последующих страниц.
- Вполне возможно, что я, возможно, пожелает добавить дополнительные сообщения в эту область из других мнений/контроллеров, но не хотят, чтобы сознавать ли я перекрывая предупреждения по обслуживанию
Я действительно изо всех сил с правильным способом сделать это. Сейчас у меня есть что-то вроде:
public class LayoutController : Controller
{
[ChildActionOnly]
public IHtmlString GetMarginMessages() {
loadMaintenanceMessages();
var messages = this.ViewBag.MarginMessages.ToSingleString();
return new HtmlString(messages);
}
private List<string> loadMaintenanceMessages() {
if (withinMaintenancePeriod)
{
this.ViewBag.MarginMessages.Add("foo");
}
else if (nearMaintenancePeriod) {
this.ViewBag.MarginMessages.Add("bar");
}
}
}
Тогда в моем макете я могу иметь:
<div id="marginMessage">@Html.Action("GetMarginMessages")</div>
В других страницах или контроллеров, я могу иметь:
this.ViewBag.MarginMessages.Add("Something") // or have it go through a helper of sorts
Является ли это право способ думать об этом? Я не в восторге от использования ViewBag, но я не вижу лучшего способа управления совместным доступом между контроллерами и контроллерами. И выполнение проверки времени обслуживания на каждом представлении рендеринга тоже не очень хорошо.
Какие существуют другие варианты, которые мне не хватает?
Да, но не делает ли дополнительный запрос на каждой странице, которую вы делаете? Я имею в виду, если у вас есть помощник Html.Action в вашем макете, тогда вы эффективно запускаете другой HTTP-запрос каждый раз ... – Marko
Правда, но вы уже запускаете запросы на изображения, скрипты, частичные виды, любые асинхронные части, такие как уведомления. если это всего лишь несколько коротких предложений сообщения, маловероятно, что один дополнительный вызов будет иметь заметное влияние, и сохранение его в одном или двух местах поможет сохранить его работоспособность, когда вы решите, что хотите добавить больше материала в сообщения позже. – anaximander
Я думаю, что это похоже на самый логичный, удобный подход. – DuncanMack