0

我正在 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");
        }
    });
};

站点.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 来放入 webmethod。

是否只是为此方法创建 WCF 服务,然后从 Jquery 代码中调用它的情况?

我在正确的轨道上吗?

感谢您的帮助和时间

4

1 回答 1

0

您的 ajax 请求很可能会失败,因为它没有到达目的地 - 正如您所说的,您不能WebMethod在主代码隐藏中拥有。此外,无需使用 JSON 序列化您的参数,普通对象也可以正常工作。此外,dataType: json这里不需要 - 您不会为此请求返回任何数据。

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

一般来说,cookie 可能是存储用户文化的更好地方,因为您可能希望在同一用户的不同访问中保留此信息。另一个选项也是数据库中的用户配置文件 - 如果您正在处理注册用户。但是,您当前使用会话的实现应该可以工作。

于 2013-03-27T14:08:42.577 回答