すべてのビューがレンダリングされるマスター レイアウト ファイルがあります。次のルールを使用して、このレイアウトの特定の領域でユーザーにメッセージを表示したいと考えています。
- メンテナンス期間中、ユーザーがサインインした後、すべてのページに警告を表示します。
- メンテナンス期間が近づくと、ユーザーがサインインした後にすべてのページに警告を表示します (ただし、#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 を使用することに興奮していませんが、ビュー間/コントローラー共有を管理するためのより良い方法がわかりません。また、ビューのレンダリングごとにメンテナンス期間のチェックを行うのも、あまり適切ではありません。
私が見逃している他のオプションは何ですか?