1

ユーザーの設定を保存しています (日付形式、言語、通貨記号など)。さて、私の見解では、これらの設定を使用して日付を表示したり、通貨を正しい記号で表示したりする必要があります。

問題は、何百ものビューモデル (実際にはモデルとビューモデルの混合) があるため、この設定オブジェクトをビューに含めるには、各 VM にプロパティを追加し、そのプロパティをコントローラーにロードする必要があることです。これは機能しますが、ちょっと臭いです。

BaseViewModelすべてのビューモデルを設定プロパティを設定できる場所から継承することを考えました。これはプロパティを一度定義するのに役立ちますが、VM がインスタンス化されたら、各コントローラーのアクションでそれをロードする必要があります。

では、これを回避し、すべてのビューで設定にアクセスするにはどうすればよいですか?

これは、アクション フィルターで を使用し、それにオブジェクトをViewData「注入」するのに適しているのでしょうか?Preferences

4

1 に答える 1

0

さて、私はこの方法でアクションフィルターを作成しました:

public class IncludePreferencesAttribute : ActionFilterAttribute
{       
   public override void OnActionExecuting(ActionExecutingContext filterContext)
   {
        var controller = filterContext.Controller as MyBaseController;

        if (controller != null)
        {
           controller.ViewBag.MyPref = controller.GetUserPreferences();
        }
    }
}

Controller アクションでは、私が装飾した設定を使用する必要があります[IncludePreferences]

次に、私が行うビューで:

@{
   var pref = ViewBag.MyPref as MyPreferences;
}

このように、ViewModel を変更する必要はなく、設定が必要なアクションでのみ読み込まれます。

于 2013-03-04T01:48:44.563 に答える