[解決済み] コントローラの基底クラスを使用せずに、すべてのViewにViewBagプロパティを設定するにはどうすればよいですか?
2023-01-01 04:31:24
質問
過去に私は、現在のユーザーのような共通のプロパティを、すべてのコントローラが共通のベースコントローラから継承することによって、グローバルな方法でViewData/ViewBagに貼り付けました。
これにより、私はベースコントローラ上で IoC を使用し、そのようなデータのためにグローバルな共有に手を伸ばさないようにすることができました。
この種のコードを MVC パイプラインに挿入する別の方法があるかどうか、疑問に思っています。
どのように解決するのですか?
私は試していませんが、次のようなものがあります。 ビューを登録する で登録し、アクティベーション時にビューデータを設定します。
ビューはその場で登録されるため、登録構文では
Activated
イベントへの接続には役立ちませんので、その場合は
Module
:
class SetViewBagItemsModule : Module
{
protected override void AttachToComponentRegistration(
IComponentRegistration registration,
IComponentRegistry registry)
{
if (typeof(WebViewPage).IsAssignableFrom(registration.Activator.LimitType))
{
registration.Activated += (s, e) => {
((WebViewPage)e.Instance).ViewBag.Global = "global";
};
}
}
}
これは、私の提案する「ハンマーしかない」タイプの提案の1つかもしれません; それを得るための、より簡単なMVC対応方法があるかもしれません。
編集します。 代替の、より少ないコードによるアプローチ - コントローラーにアタッチするだけ
public class SetViewBagItemsModule: Module
{
protected override void AttachToComponentRegistration(IComponentRegistry cr,
IComponentRegistration reg)
{
Type limitType = reg.Activator.LimitType;
if (typeof(Controller).IsAssignableFrom(limitType))
{
registration.Activated += (s, e) =>
{
dynamic viewBag = ((Controller)e.Instance).ViewBag;
viewBag.Config = e.Context.Resolve<Config>();
viewBag.Identity = e.Context.Resolve<IIdentity>();
};
}
}
}
2を編集します。 コントローラの登録コードから直接動作する別のアプローチです。
builder.RegisterControllers(asm)
.OnActivated(e => {
dynamic viewBag = ((Controller)e.Instance).ViewBag;
viewBag.Config = e.Context.Resolve<Config>();
viewBag.Identity = e.Context.Resolve<IIdentity>();
});
関連
-
[解決済み] GET リクエストを許可するには、JsonRequestBehavior を AllowGet に設定します。
-
[解決済み] RedirectToActionでURLが変更されない、またはIndexビューに移動しない
-
[解決済み] ASP.NET MVCにおけるApiControllerとControllerの相違点
-
[解決済み] 既存のASP.NET MVC 4 WebアプリケーションのプロジェクトにWeb APIを追加するにはどうすればよいですか?
-
[解決済み】Html5 data-* with asp.net mvc TextboxFor html attributes
-
[解決済み】NULLモデルを持つrenderpartialは、間違った型を渡される
-
[解決済み】Java Server Faces 2.0の主なデメリットは何ですか?
-
[解決済み】Html.ActionLinkを使用して別のコントローラのアクションを呼び出す
-
[解決済み] ASP.NET MVCにおけるロールベースアクセスコントロール(RBAC)とクレームベースアクセスコントロール(CBAC)の比較
-
[解決済み] 型名または名前空間名 'DbContext' が見つかりませんでした [閉鎖]。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] glyphicons-halflings-regular.woff2 not foundに関するエラーを削除する方法
-
[解決済み] DI向けNinjectとUnityの比較【終了しました
-
[解決済み] ASP.NET MVCのビューを文字列としてレンダリングする方法は?
-
[解決済み] ASP.NET MVCにおけるApiControllerとControllerの相違点
-
[解決済み】MVCアプリケーションでデータをキャッシュする方法
-
[解決済み] [Solved] ASP.NET MVCで404を適切に処理するには?
-
[解決済み】HTTPエラー500.19とエラーコード: 0x80070021
-
[解決済み] datetime2 データ型から datetime データ型への変換で、範囲外の値が発生しました。
-
[解決済み] mvc 4 で部分ビューにパラメータを渡すにはどうすればよいですか?
-
[解決済み] HTMLヘルパーでURLを生成する