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