0

から派生したすべてのビューにいくつかの共通プロパティを取得しようとしていますViewModelBase。ある種のキャッチ22に出くわしたことを除いて...

my の一般的なプロパティは次のViewModelBaseとおりです: Userand Environment(他にもありますが、この質問ではこれら 2 つで十分です)。

現在、これら 2 つのプロパティを割り当てるグローバル フィルタがあります。ViewModelBase.UserプロパティはBaseController.User、以前に認可フィルタによって割り当てられた から割り当てられます。

すべての場合にうまく機能しますが、これは次のとおりです。ビジネスロジックに基づいて、承認フィルターがユーザーを「まだ承認されていない」ページにリダイレクトすることがあります。これは次のように行われます。

var notApprovedView = new ViewResult();
notApprovedView.ViewName = "NotYetApproved";
filterContext.Result = notApprovedView;

ただし、この場合、ViewModel には、グローバル フィルターによって割り当てられるはずの共通プロパティがまだないため、実行時例外が発生します。

共通のプロパティを割り当てる必要があり、承認に応じて共通のプロパティの一部が変更される可能性がある状況に対処するための適切な (つまり、ハックではなくベスト プラクティスの) 方法は何ですか?

ありがとう。

4

1 に答える 1

0

私はこの 1 つの木のための森を逃したかもしれないと思う. 申し訳ありません。

Authorization Filter で次のことを実行できます。

var notApprovedView = new ViewResult();
notApprovedView.ViewName = "NotYetApproved";

// add this line    
notApprovedView.Model = new ViewModelBase(){User = this.user};

filterContext.Result = notApprovedView;
于 2013-04-08T20:27:26.627 に答える