在我当前的项目中,我有一个自定义 ViewData,它具有(除其他外)以下属性:
自定义视图数据 + IList <语言> siteLangauges + 语言 CurrentLanguage + T9nProvider
我所有的网址都是这样的:
http://someUrl.com/ {siteLanguage}/{restOfUrlIncludingcontrollersAndACtions}
我想创建一个捕获每个请求的 ActionAttribute,检查 siteLanguage 值是什么,并在 CustomViewData 上设置 Language 值。我当前的(非工作)代码是这样的:
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。为什么不?