すべてのコントローラーは BaseController に基づいており、それらの間でプロパティを共有し、OnActionExecuting をオーバーライドして、ルートに基づいていくつかの値を設定します。
すべてのビュー データに対して同じことを行う BaseViewData クラスを作成しています。
現時点では、ビュー データを次のように入力しています (C#):
var viewData = new BaseViewData
{
Name = "someName",
Language = "aLanguage",
Category = "aCategoryName"
};
ビューデータを必要とするすべてのアクションでこれを行います。一部のプロパティは一般的で、すべてのアクションで設定する必要があります。いくつかのプロパティをよりグローバルなスケールで設定する方法はありますか?
BaseController の OnActionExecuting メソッドで BaseViewData クラスをインスタンス化する場合、通常のコントローラー (BaseController から派生) のアクションから BaseViewData プロパティにアクセスするにはどうすればよいですか?
Dennis Palmer に応じて更新します。
一部のリクエストで ViewData["lang"] がランダムに入力されないという厄介な問題のために、私は基本的にこれを行っています。ViewData["lang"] には、言語が英語の場合は "en" が含まれ、日本語の場合は "ja" が含まれます (まあ、とにかくそうなるはずです)。BaseController の OnActionExecuting 内に ViewData["lang"] を入力します。
私の見解では、言語に基づいていくつかの部分ビューを呼び出します。
<% Html.RenderPartial(ViewData["lang"] + "/SiteMenu"); %>
しかし、「/SiteMenu が見つかりません」という状態のエラーがランダムにスローされます。これは、ViewData["lang"] に値がないことを示しています。ViewData["lang"] が入力されない理由が見つかりません。そのため、強く型付けされたビュー データのみを使用するようにサイトを書き直しています (そして、いくつかのハード デフォルトを設定しています)。しかし、別の方法がより良い場合は、その方法を使用します。
ありがとうございました!