В моем текущем проекте у меня есть пользовательские ViewData, который имеет (среди прочих) следующие свойства:
CustomViewData
+ IList <Language> siteLangauges
+ Language CurrentLanguage
+ T9nProvider
Все мои URL идут так:
http://someUrl.com/{siteLanguage}/{restOfUrlIncludingcontrollersAndACtions}
Я хочу создать ActionAttribute, который перехватывает каждый запрос, проверяет значение siteLanguage и устанавливает значение Language в CustomViewData.
Мой текущий (не рабочий) код выглядит так:
public class TranslateAttribute: ActionFilterAttribute, IActionFilter
{
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{
ViewDataDictionary viewData = filterContext.Controller.ViewData;
if (viewData is CustomViewData) {
(viewData as CustomViewData).Language = new Language(filterContext.ActionParameters["siteLanguage"] as string));
}
base.OnActionExecuting(filterContext);
}
void IActionFilter.OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
}
}
Первая проблема заключается в том, что viewdata никогда не является customviewdata. Почему нет?