Próbuję stworzyć własny atrybut filtru w celu wspierania wielojęzyczności. Pomysł jest prosty. URL oznacza język.w MVC4 pokazuje i błąd, że muszę zaimplementować jakiś interfejs, ale już go zrobiłem
- * http: //host.ext/ PL/rest_of_the_url * otworzy się w języku angielskim i
- * http: //host.ext/ hy/rest_of_the_url * otworzy się w Armenii.
Problem polega na tym, że w perspektywie mówi, że MultilingualActionFilterAttribute
Oto tekst błędu „Podany przykład filtr musi implementować jeden lub więcej z następujących interfejsów filtrów. IAuthorizationFilter, IActionFilter, IResultFilter, IExceptionFilter”
Tutaj używam go jako filtra globalnego.
namespace TIKSN.STOZE.WebApp
{
public class FilterConfig
{
public static void RegisterGlobalFilters(System.Web.Mvc.GlobalFilterCollection filters)
{
filters.Add(new TIKSN.STOZE.Common.MultilingualActionFilterAttribute());
filters.Add(new System.Web.Mvc.HandleErrorAttribute());
}
}
}
Oto jestem definiowania go.
namespace TIKSN.STOZE.Common
{
public class MultilingualActionFilterAttribute : System.Web.Mvc.ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
{
string language = System.Convert.ToString(filterContext.RouteData.Values["language"]);
System.Diagnostics.Debug.Print("Requested language is '{0}'", language);
language = Helper.PickUpSupportedLanguage(language);
System.Diagnostics.Debug.Print("Supported language is '{0}'", language);
if (language == string.Empty)
{
filterContext.HttpContext.Response.RedirectToRoutePermanent(new { language = Common.Properties.Settings.Default.DefaultLanguageCode });
}
language = Helper.TryToPickUpSupportedLanguage(language);
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(language);
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(language);
}
}
}
To wszystko wygląda OK. Czy jest to zupełnie nowa witryna MVC4, czy też zmodernizowana z MVC3? Może to być problem z wersją biblioteki DLL - czy próbowałeś usunąć tymczasowe pliki ASP.NET? – levelnis
używasz aplikacji webowej? –