こんにちは、Razor MVC の達人:
初心者の質問です。
バックグラウンド。コントローラーとビューに到達する前に、HttpModule に設定されたカスタム IIdentity があります。それを使用するには、私はしなければなりません
MyIdentity myIdentity = (MyIdentity)((GenericPrincipal)context.User).Identity;
MyComplexUser user = myIdentity.User;
//user.name //user.location //user.username //etc
問題は、次のようなさまざまな場所でオブジェクトを使用することです
- マスター レイアウト
- 一部のサブレベルのネストされたレイアウト
- 一部の部分ビュー
- 一部のビュー
ビューが必要とする "MyComplexUser" オブジェクトのプロパティに大きく依存します。
現在、ビューでは、プロパティに到達するために非常に複雑なキャストを行う必要があります。たとえば、ユーザーの「名前」が必要な場合は、次のようにする必要があります
@(((MyComplexUser)(((MyIdentity)((GenericPrincipal)context.User).Identity).User)).Name)
私はそれをコントローラーに入れてから ViewBag に ViewBag.MyUser プロパティを設定できると思いますが、その後
- ViewBag を使用するのは好きではありません。強く型付けされたオブジェクトを好む
- ビューに厳密に型指定されたオブジェクト ("MyUser") を使用する場合、それらすべてのモデルに "MyUser" プロパティを使用する必要があります。ちょっと汚い感じ?私は自分のモデルをきれいに保ち、関係するビューに固有のものにするのが好きなので. その上、それは不必要に繰り返されます。
- master_layout.cshtml や partialviews のような場所で、コントローラーに配置した場合、どのように「MyUser」にアクセスしますか?
- RenderAction を使用し、ユーザー プロパティごとに部分ビューを構築するのはやり過ぎですか?
ありがとう。繰り返しますが、私は MVC 4 の初心者です。どんな提案でも大歓迎です。