Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASPX项目中设置CurrentUI_C#_Asp.net_Jquery_Cultureinfo - Fatal编程技术网

C# 在ASPX项目中设置CurrentUI

C# 在ASPX项目中设置CurrentUI,c#,asp.net,jquery,cultureinfo,C#,Asp.net,Jquery,Cultureinfo,我正在webforms aspx项目中构建一个多语言站点,我正在考虑实现这一目标的最佳解决方案 我在母版页上有一些图像,单击后,我将调用Jquery方法,该方法应重定向到web方法 反过来,我有一个正在初始化区域性的基页,除母版页外的所有页面都从中继承 到目前为止,我有以下几点:- HTML:- <div class="LocalizationFlags"> <img src="Images/gb.png" onclick="langSelection('gb')" />

我正在webforms aspx项目中构建一个多语言站点,我正在考虑实现这一目标的最佳解决方案

我在母版页上有一些图像,单击后,我将调用Jquery方法,该方法应重定向到web方法

反过来,我有一个正在初始化区域性的基页,除母版页外的所有页面都从中继承

到目前为止,我有以下几点:-

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>
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不起作用,抛出一个“Fail”,而且我知道我不能使用Site.Master.cs来放入webmethod

这只是为这个方法创建一个WCF服务,然后从Jquery代码调用它的一个例子吗

我走对了吗


感谢您的帮助和时间

您的ajax请求很可能失败,因为它没有到达目的地-正如您所说,您不能在master's codebehind中使用
WebMethod
。另外,不需要用JSON序列化参数,普通对象也应该可以工作。此外,
dataType:json
在这里是不需要的-您不会为此请求返回任何数据

这里不需要web服务——一个简单的HTTP处理程序就足够了。只是不要忘记实现marker接口
irerequiressessionstate
,以便访问处理程序中的会话


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

您好,Andrei,谢谢您的解释。你能给我一个你提到的HTTP处理程序的例子吗?@Johann,这是到的链接。简而言之,它非常简单-您使用一个方法实现一个接口,在web.config中注册,然后从应用程序的其他部分调用它。嗨,Andrei,所以我创建了一个类CultureHandler,它使用一个方法SetUserCulture(string lang)实现IHTTPHandler和iRequiresessionState。如何在web.config中注册它,然后在代码中使用它?@Johann,下面是注册例程的步骤。确保
SetUserCulture
ProcessRequest
方法中被调用-这是ASP.NET将调用的方法。注册后,处理程序将在指定的URL处为您提供—在ajax调用中使用它。
    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();
    }