0


0

私の現在のプロジェクトでは、私は(とりわけ)以下のプロパティを持つカスタムViewDataを持っています。

CustomViewData
  + IList  siteLangauges
  + Language CurrentLanguage
  + T9nProvider

私のURLはすべて次のようになっています。

各リクエストをキャッチし、siteLanguage値が何であるかを確認し、CustomViewDataのLanguage値を設定するActionAttributeを作成したいと思います。 私の現在の(動作していない)コードはこのようなものです:

パブリッククラスTranslateAttribute:ActionFilterAttribute、IActionFilter {void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext){ViewDataDictionary viewData = filterContext.Controller.ViewData;} if(viewDataはCustomViewData){(viewViewはCustomViewData).Language = new Language(filterContext.ActionParameters ["siteLanguage"]は文字列)); base.OnActionExecuting(filterContext); }

void IActionFilter.OnActionExecuted(ActionExecutedContext filterContext){base.OnActionExecuted(filterContext); }}

最初の問題は、そのビューデータがカスタムビューデータではないことです。 何故なの?

2 Answer


0


_ if(viewDataはCustomViewData) _

これは非常に奇妙なチェックです。 それは何をするためのものか?

落とすことをお勧めします。

基本実装 - base.OnActionを呼び出す必要はありません…​

IActionFilterから派生する必要もありません。 ActionFilterAttributeから派生した、それで十分です。


0


ViewDataをコントローラに設定できるので、ViewDataオブジェクトを受け取るCustomViewDataのコンストラクタを作成しないでください。

var customData = new CustomViewData(filterContext.Controller.ViewData); customData.Language = new Language(filterContext.ActionParameters ["siteLanguage"]文字列)); filterContext.Controller.ViewData = customData; base.OnActionExecuting(filterContext);