我有一个主布局文件,我的所有视图都在其中呈现。我想使用以下规则向此布局的特定区域中的用户显示一条消息:
- 在我们的维护期内,在用户登录后在每个页面上显示警告。
- 在我们的维护期临近时,在用户登录后在每个页面上显示警告(但内容与 #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 并不感到兴奋,但我没有看到更好的方法来管理视图间/控制器共享。并且对每个视图渲染进行维护时间段检查也感觉不太正确。
我还缺少哪些其他选择?