在ASPX项目中设置CurrentUI

时间:2013-03-27 13:52:30

标签: c# asp.net jquery cultureinfo

我正在webforms aspx项目中构建一个多语言网站,我正在考虑这样做的最佳解决方案。

我在MasterPage上有一些图像,一旦点击,我正在调用一个Jquery方法,它应该重定向到一个Web方法。

反过来,我有一个初始化文化的基页,除了MasterPage之外的所有页面都继承了它。

到目前为止,我有以下内容: -

HTML: -

<div class="LocalizationFlags">
<img src="Images/gb.png" onclick="langSelection('gb')" /> &nbsp; &nbsp; 
<img src="Images/fr.png" onclick="langSelection('fr')"/> &nbsp; &nbsp; 
<img src="Images/es.png" onclick="langSelection('es')"/> &nbsp; &nbsp; 
<img src="Images/de.png" onclick="langSelection('de')"/> &nbsp; &nbsp; 
<img src="Images/it.png" onclick="langSelection('it')"/>
</div>

JQuery: -

    function langSelection(lang) {
    setSession(lang);
};

function setSession(Lang) {
    var args = {
        lang: Lang
    };
    $.ajax({
        type: "POST",
        url: "Site.Master.aspx/SetUserCulture",
        data: JSON.stringify(args),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function () {
            alert('Success.');
        },
        error: function () {
            alert("Fail");
        }
    });
};

Site.Master.cs

    [WebMethod(EnableSession = true)]
    private void SetUserCulture(string lang)
    {
        HttpContext.Current.Session["CurrentUI"] = lang;
    }

BasePage.cs

    protected override void InitializeCulture()
    {
        if (Session["CurrentUI"] != null)
        {
            String selectedLanguage = (string)Session["CurrentUI"];
            UICulture = selectedLanguage;
            Culture = selectedLanguage;

            Thread.CurrentThread.CurrentCulture =
                CultureInfo.CreateSpecificCulture(selectedLanguage);
            Thread.CurrentThread.CurrentUICulture = new
                CultureInfo(selectedLanguage);
        }

        base.InitializeCulture();
    }

现在我有几个问题。 Jquery不起作用,抛出“失败”,而且我知道我不能使用Site.Master.cs来放入web方法。

是否仅为此方法创建WCF服务,然后从Jquery代码调用它?

我在这里走在正确的轨道上吗?

感谢您的帮助和时间

1 个答案:

答案 0 :(得分:0)

您的ajax请求很可能因为未到达目的地而失败 - 正如您所说,在主代码后面不能有WebMethod。此外,不需要使用JSON序列化您的参数,普通对象也应该正常工作。此外,此处不需要dataType: json - 您不会返回此请求的任何数据。

这里不需要Web服务 - 一个简单的HTTP处理程序就足够了。只是不要忘记实现标记接口IRequiresSessionState以访问处理程序内的会话。

通常,Cookie可能是存储用户文化的更好位置,因为您可能希望在同一用户的不同访问中保留此信息。另一个选项也是数据库中的用户配置文件 - 如果您正在与注册用户打交道。但是,您当前使用会话的实现应该有效。