2011-12-28 58 views
0

我有一个Web应用程序(ASP.NET MVC 3),本地化支持en-US,pt-BR,es-ES。为什么RedirectToAction会更改ThreadID?

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
    int threadId = Thread.CurrentThread.ManagedThreadId; 
    string threadUICulture = Thread.CurrentThread.CurrentUICulture.ToString(); 
    return View(); 
    } 
} 

public class LanguageController : Controller 
{ 
    public ActionResult EN() 
    { 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
    return RedirectToAction("Index", "Home"); 
    } 

    public ActionResult ES() 
    { 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-ES"); 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES"); 

    int threadId = Thread.CurrentThread.ManagedThreadId; 
    return RedirectToAction("Index", "Home"); 
    } 

    public ActionResult PT() 
    { 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("pt-BR"); 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR"); 
    return RedirectToAction("Index", "Home"); 
    } 
} 

我启动应用程序与文化EN-US,与ActionLink的,我所说的语言/ ES更改为西班牙语和重定向到索引页。但不工作,索引页面仍然是英文...

我看到线程Id在方法LanguagesController.ES和HomeController.Index上不同。

如何管理ASP.NET MVC应用本地化的最佳方式是什么?

+0

这里有一篇文章可能会让你朝着正确的方向前进。 http://blog.stevelydford.com/2011/01/asp-net-mvc-3-internationalization/ – 2011-12-28 14:21:22

+0

每个请求都由不同的线程处理。 – 2011-12-28 17:46:34

回答

0

我想,在你的控制器中,设置会话文化应该工作。

Session [“Culture”] = new CultureInfo(“ES-ES”);

HttpContext.Session [ “文化”] =新的CultureInfo( “ES-ES”);

1

发生这种情况是因为每个请求都是从线程池中提取的线程提供的。所以,虽然第一个请求可以在线程A上服务,但第二个请求可以在线程B上服务。您需要在某处保留关于当前文化的信息。这可能是:会话,Cookie,一些URL路由参数等。请看下面的localization guide

相关问题