いくつかのベースコントローラまたはフィルタを使用して現在のリクエストにデータを追加する必要がある場合、私は自分自身がViewDataを使用することがよくあります。通常、マスターページにはサーバーから取得する必要がある動的コンテンツがあり、ビューから返されたモデルを変更するか、親ViewModelで返されたすべてのモデルをラップするのではなく、追加データをViewDataに配置するだけです。
私のビューで文字列を使用しないようにするために、コントローラクラスなどにconstフィールドを置き、ビュー内のフィールドを呼び出すことがよくあります。
public abstract partial class BaseController : Controller
{
public const string MessagesViewDataKey = "Base.Messages";
protected override void OnActionExecuted(ActionExecutedContext filterContext) {
if (filterContext != null && filterContext.Controller != null && !filterContext.IsChildAction) {
filterContext.Controller.ViewData[MessagesViewDataKey] = Messenger.MessageQueues;
}
base.OnActionExecuted(filterContext);
}
}
// site.master
<% if (ViewData[BaseController.MessagesViewDataKey] != null)
Html.RenderPartial("DisplayTemplates/MessageList", ViewData[BaseController.MessagesViewDataKey]); %>
魔法の文字列自体は、定数の文字列を持つことで回避できます。 – Baz1nga