Asp.Net MVC2上にホワイトラベルのプラットフォームが構築されています。現在のところ、サイトには6つのコントローラーと、すべてのコアビューなどがあり、これをそのまま使用することができます。これまでに5つのサイトを構築してきました。既存のMVCサイトを拡張して、すべてのアクションで新しいデータをViewDataに渡します。
しかし、私は、すべてのビューからすべてのビューに新しいデータ(ViewDataディクショナリで問題ありません)を渡す必要があるということを意味します。このデータはクエリ文字列から、次にクッキーからシードされます。
この主な理由の1つは、このデータの値に応じてサイトのマスターページに余分な画像を追加できることです。もちろん、私は本当に汚れていて、マスターページに非直列化コードを置くことができます。私はむしろコントローラの継承とアクションメソッドのオーバーライドを含まないのすべての要求に対してViewDataに確実に追加する方法を見つけ出します。(!)
どのようなアイデアも大いに感謝しています!その後、
public class AdditionalViewDataInjectorAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
filterContext.Controller.ViewData["foo"] = "bar";
}
}
そして、この属性を使用してベースコントローラを飾る:
Genius - 後者の子アクションを使用するソリューションは絶対に動作しますサイトが既にどのようにスタックしているかに完璧にフィットしています。私は、カスタムモデルのバインダー(クッキーとクエリ文字列と相互作用する)を使用するアクションメソッドパラメーターとしてデータを取得します。このバインダーはコンテンツの部分ビューを起動し、バインドされたオブジェクトを単にモデルとして渡します。その後、マスターはただ1行のHtml.RenderAction()を使用し、すべてのページで動作します。ありがとう:) –