避免每次通话都要检查这种文化?

时间:2011-02-04 05:14:54

标签: asp.net-mvc asp.net-mvc-2 session .net-4.0

让我介绍一下我的情景背景。我有一个多语言网站,我的文化存储在数据库中,并获得了public bool Active { get; set; }

的属性
  1. 如果你来到我的网站,让我们在你的浏览器上说俄罗斯文化,我的网站不支持,所以我需要将文化设置为“se”(或其他)。

  2. 如果您使用受支持的文化来到我的网站,但它不是活动的,我需要将其设置为默认的“se”(或其他)。

  3. 现在,我可以使用override IHttpHandler GetHttpHandler方法轻松完成此检查。问题是,每当网站在网站上进行任何调用时,我都不想调用数据库。我的想法是我做了一个会话[“firstVisit”]以减少那个检查,但我有点不知道我应该怎么做,因为我的情景它说 会话[“firstVisit”]行上的 not set to an instance of an object ,所以我的问题是如何处理?还有什么其他的选择呢?

    我的想法是这样的

    protected override IHttpHandler GetHttpHandler(System.Web.Routing.RequestContext requestContext)
            {            
                String culture = requestContext.RouteData.Values["culture"].ToString();
    
                if (HttpContext.Current.Session["firstVisit"].ToString() == string.Empty)
                {
                    //do the check
                }
    
                var ci = new CultureInfo(culture);
                Thread.CurrentThread.CurrentUICulture = ci;
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
                return base.GetHttpHandler(requestContext);
            }
    

    编辑
    为什么我没有想到这一点,我最后只是在protected void Application_Start()进行检查以避免会话

1 个答案:

答案 0 :(得分:0)

使用global.asax.cs:

protected void Session_Start( object sender, EventArgs e )

首次创建会话时会调用此方法。然后,您可以进行检查,在会话中填写您的语言信息,并在会话通过用户与您的网站进行互动时生效。