ASP.NET MVC アプリケーションで Session をどのように使用すればよいかについての考えを探していますか? 特にマスターページを使用して、コントローラーをバイパスせずにマスターページにデータを取得しようとする場合。この質問は、私が多くの小さな質問をすることから始まりましたが、まだ実装していませんが、ある程度実行可能なソリューションに形作ることができました。フィードバックをいただければ幸いです。
私の提案する解決策は、別名「誰かがやめろと言わない限り、私が実装しようとしているもの」です。
ModelBase から継承するモデル クラスがあります。これには、マストヘッドまたはフッターに表示される特定のものと、ログインしているユーザーに基づく構成主導の設定について、マスターページ (ページごとに 1 つのビューしかありません) に必要な情報が含まれています。
私の最善の解決策は次のとおりです-「製品ページ」についてここに示します:
仮定: ある時点で、セッション内の特定のデータを既にスタックしてい
partnerId
ますcurrentLoggedInUserEmail
。私はすべてのモデルが継承する
ModelBase
クラスを持っていますProductModel
MySiteControllerBase
クラス(コントローラーから継承)があります-これはによってサブクラス化されますProductController
。私のアクション メソッドでは、
ProductController
を使用して製品ビューのモデルを作成します'new ProductModel()'
。このモデル クラス自体は、セッションやデータの入力方法について何も知りませんModelBase
。それは基本的に何も知りませんModelBase
- それから継承するだけです。連鎖コンストラクターは何もしません (渡したくないためSession
)。モデル パラメーターを受け取るすべてのオーバーロードをオーバーライド
View(...)
します。MySiteControllerBase
そのパラメーターが型であるかどうかを確認し、型である場合はやModelBase
などのプロパティを入力します。幸いなことに、私はから継承するクラスの中にいるので、直接アクセスできるので、そこから直接それらを引き出すことができます。partnerid
currentLoggedInuserEmail
Controller
Session
このメソッドは、ModelBase
私が'return View(model)'
. ProductModel
ただし、 のモデルが で定義されたものにアクセスする必要がある場合は、明らかな問題がありますModelBase
。まだ入力されていないため、null になります。
この問題は、コンストラクター チェーンを介して に渡すSession
ことで解決できます。モデルを、外部データ構造についてまったく知らないはずのかなりばかげたデータ構造と考えるのが好きなので、私はそのソリューションが本当に好きではありません。別の解決策は、それを翼にすることかもしれません。その中で定義されたものを消費する必要があることがわかった場合は、メソッドを作成して、内部に明示的に入力します。それが明確であることを願っています!new ProductModel(session)
new ModelBase(session)
ProductController
ModelBase
MySiteControllerBase.UpdateModelBase(productModel, session)
ProductController
頭に浮かぶ他の質問は次のとおりです。
- 単体テストはどうですか?MVC のセッション状態に関する抽象化はありますか?それとも独自に構築する必要がありますか? ソースコードで「セッション」を検索しましたが、何も表示されませんでした。
- セッション トラッキングは MVC の /REST/FUL/URLS でどのように機能しますか? 私が知る必要がある Cookie オフに関する問題はありますか?
- セッションを従来とは異なる方法で考えるべきですか?