ASP.NET网页编程之asp.net 2.0完成言语和主题的切换
呵呵,那你就关注微软的招聘信息以及别人的招聘经验啊,还有也不一定去做技术的,你如果真的想去就多了解了解。(其实我的意思是说想到微软做技术是很不容易的。asp.net在ASP.NET2.0中供应多言语转换和多款式主题转换功效,两种完成情势对照相似,以是放在一同申明一下。1.Languageswitcher多言语转换
在QuickStartTutorial中,先容了怎样存储和使用用户选择的言语。通常为用一个DropDownList展现撑持的言语,供用户选择,一般是放在masterpage内里,将用户选择的言语存储起来这里用了ASP.NET2.0的Profile,固然也能够存在cookiesession大概querystring里。在页面里重写InitializeCulture办法,利用用户之前选择的言语。由于设置言语的操纵(这里是SelectedIndexChanged事务)产生在InitializeCulture工夫前面,以是在设置操纵完成后为了使确当前页面也即刻失效,必要做个重转向,以重新加载本页面,触发InitializeCulture事务。上面使quickstart中的部分代码,注重白色部分。由于有的页面地点前面大概还存在queystring,以是团体以为白色代码部分最好用Response.Redirect(Request.Url.PathAndQuery);取代。
protectedvoidDropDownLanguage_SelectedIndexChanged(objectsender,EventArgse)
{
stringSelectedLanguage=DropDownLanguage.SelectedValue.ToString();
//Saveselecteduserlanguageinprofile
Profile.SetPropertyValue("PreferredCulture",SelectedLanguage);
//Forcere-initializationofthepagetofireInitializeCulture()
Response.Redirect(Request.Url.LocalPath);
}
protectedoverridevoidInitializeCulture()
{
//overridevirtualmethodInitializeCulture()tocheckifprofilecontainsauserlanguagesetting
stringUserCulture=Profile.GetPropertyValue("PreferredCulture").ToString();
if(UserCulture!="")
{
//thereisauserlanguagesettingintheprofile:switchtoit
Thread.CurrentThread.CurrentUICulture=newCultureInfo(UserCulture);
Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture(UserCulture);
}
}
为了削减代码的反复,一样平常会自界说一个customerbasepage类,使它承继Page类,然后在自界说的页基类中从头InitializeCulture办法。最初把你的每一个页面承继自你的自界说页面基类。如许你就不必要每一个页面都重写InitializeCulture办法了。
可是下面这个办法仍是不是很爽,由于每增加一个页面都要往修正后置代码,来承继自界说页基类。
我们注重到,在InitializeCulture办法中实践上只是修正了以后线程的Culture和UICulture。那末可不成以在一个全局的事务中,好比Application的某个事务,来修正这两个属性呢?很早之前我这么试过,在Application的BeginRequest事务触发时来完成InitializeCulture的细节,相似于上面代码:
voidApplication_BeginRequest(objectsender,EventArgse)
{
stringlang=string.Empty;//defaulttotheinvariantculture
lang=Profile.PreferredCulture;
if(string.IsNullOrEmpty(lang))
{
lang=string.Empty;
}
Thread.CurrentThread.CurrentUICulture=CultureInfo.GetCultureInfo(lang);
Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture(lang);
}
注重白色部分使用其他体例代替,由于在beginrequest触发阶段,profile工具还没有被asp.net创立。能够用cookies代替。
我记妥当时这么做后,言语设置后其实不起感化,事先以为在全局事务中处置,大概到厥后仍是会被掩盖失落,以是大概不可。以是事先仍是用了InitializeCulture办法。明天在asp.net论坛里看到有人云云完成了,
voidApplication_BeginRequest(Objectsender,EventArgse){
stringlang=string.Empty;//defaulttotheinvariantculture
HttpCookiecookie=Request.Cookies["DropDownName"];
if(cookie!=null&&cookie.Value!=null)
lang=Request.Form;
Thread.CurrentThread.CurrentUICulture=CultureInfo.GetCultureInfo(lang);
Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture(lang);
}
以是以为事先大概那里没有设置好,因而又试了一次,本来是页面头指令<%@PageUICulture="auto"Culture="auto"%>的缘故原由,假如在页面中设置了UICulture和Culture后,它们就会掩盖失落在全局中的设置。往失落以后,全局设置起感化了。看来页面中的culture的设置会掩盖全局的设置,而页面中InitializeCulture办法(切实说是统统撑持该办法的控件)的设置会掩盖页面的设置。实在在Page类中InitializeCulture办法的默许完成是空的,因而再将页面头指令UICulture="auto"Culture="auto"往失落后,Global中的设置就起感化了。
别的,假如很想利用Profile(像我一样)来存储用户的选择,那就不克不及在beginrequest阶段来处置了,我是在PreRequestHandlerExecute事务触发时处置:
voidApplication_PreRequestHandlerExecute(objectsender,EventArgse)
{
stringlang=string.Empty;//defaulttotheinvariantculture
lang=Profile.PreferredCulture;
if(string.IsNullOrEmpty(lang))
{
lang=string.Empty;
}
Thread.CurrentThread.CurrentUICulture=CultureInfo.GetCultureInfo(lang);
Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture(lang);
}
这个时分Profile已被创立了,以是可使用了。
2.多款式主题转换Themeswitcher
这篇文章讲了Theme的切换,以为情势上和言语的切换很相似。他利用了HttpModule,我以为间接放在Global.asax文件里对应的事务处置发放下就能够了,说究竟都是一样的。他的存储接纳了cookie,我还时以为用Profile好,既然供应了就用呗,Profile应当是有缓存的吧,以是功能应当不是成绩。你所列的那些其实差不多都可以称为应用服务器(servlet应该说是一种语言更合适)java是开放的,相同的工具就会有很多公司在做,加上java已经发展了很多年了,因此这些工具就很多了。他们很多都是类似的。 如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。 主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。 但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。 主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。 Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。 业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
页:
[1]