В моем текущем проекте у меня есть собственные ViewData, что имеет (среди прочих) следующие свойства:TranslateAttribute для моего asp.net-MVC сайта
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);
}
}
Первая проблема в том, что видеоданные не является customviewdata. Почему нет?
Потому что это означает, что использование атрибута translate приведет к возврату пользовательских представлений. –
Предположительно, ваш CustomViewData происходит из ViewDataDictionary. Если нет, то это должно произойти. В этом случае при использовании TranslatedAtttribute не будет проблемой вернуть объект CustomViewData. Другие объекты, ожидающие использования ViewDataDictionary, могут использовать его взаимозаменяемо. – tvanfosson
Этот вопрос был откомандирован пользователем Сообщества, и с тех пор изменился набор требований. Но к первоначально заданному вопросу, это был ответ, на который я основал мое решение. благодаря –