项目(多国技术) 总结
一开始是做皮肤,怎样建皮肤?
我们可以在web.config文件中的 <system.web/>加入一行:<pages theme="traditional"/>
这句话意思是所有页面默认主题为:traditional。
然后新建APP_Themes文件夹,并在下面建立各种主题,如simple、traditional、english。
然后我们新添一个master文件,在该文件中,我们使用class即样式表、与skinid来配置显示效果。
而class与skinid都可以分别在主题的皮肤文件与样式文件中统一设置,在后台编码中我们只需改变Page.Theme属性即可。值得注意的一点是Page.Theme属性不可在page_load事件中设置,必须在page_preinit事件中或之前设置。为此,我们新建一个pagebase类,其继承System.Web.UI.Page类,里面实现一些切换主题与culture属性值。然后我们将来新建的页面统一继承pagebase类,达到统一修改主题与文化属性。
还有一点需要注意的是:在设置文化属性值时与设置主题属性一样,必须在preinit事件中执行。
具体代码如下:
现在我们已经达到了切换主题与文化的目的,但在运行的过程中,还有一点小问题。![Smile](http://localhost:99/emoticons/emotion-1.gif)
就是比如:我新建了一个default页面,让他自动产生三个资源文件,文件名为:
default.aspx.zh-CN.resx
default.aspx.zh-TW.resx
default.aspx.en-US.resx
设置好后,运行,发现并不能切换文字效果,比如页面中有个label,其设置meta:resourcekey="Label1Resource1",当我切换文化时,并不能获取相应的资源文件。
而当我把default.aspx.zh-CN.resx改为default.aspx.resx时,运行正常!![Surprise](http://localhost:99/emoticons/emotion-3.gif)
![Idea](http://localhost:99/emoticons/emotion-55.gif)
很奇怪。。。
现在还有一个问题没有解决。
就是我这里存储的theme与culture都是在session中,而我想把它放入profile中,达到个性化目的,
我一开始是这样做的,在web.config文件中加入:
<anonymousIdentification enabled="true" />
<profile defaultProvider="ITsolution">
<providers >
<add name="ITsolution" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="itsolutionconnection" applicationName="itsludis"/>
</providers>
<properties>
<clear/>
<add name="theme" allowAnonymous="true" defaultValue="simple"/>
<add name="culture" allowAnonymous="true" type="System.String"/>
</properties>
然后在master.cs中设置profile属性值。而下一步是我必须把profile里面设置的theme与culture值取出来,但在pagebase类中并没有profile这个实例对象,那该怎么取呢?高手帮帮忙!
我们可以在web.config文件中的 <system.web/>加入一行:<pages theme="traditional"/>
这句话意思是所有页面默认主题为:traditional。
然后新建APP_Themes文件夹,并在下面建立各种主题,如simple、traditional、english。
然后我们新添一个master文件,在该文件中,我们使用class即样式表、与skinid来配置显示效果。
而class与skinid都可以分别在主题的皮肤文件与样式文件中统一设置,在后台编码中我们只需改变Page.Theme属性即可。值得注意的一点是Page.Theme属性不可在page_load事件中设置,必须在page_preinit事件中或之前设置。为此,我们新建一个pagebase类,其继承System.Web.UI.Page类,里面实现一些切换主题与culture属性值。然后我们将来新建的页面统一继承pagebase类,达到统一修改主题与文化属性。
还有一点需要注意的是:在设置文化属性值时与设置主题属性一样,必须在preinit事件中执行。
具体代码如下:
protected void Page_PreInit(object sender, EventArgs e)
{
if (Session["theme"]!=null)
{
Page.Theme = Session["theme"].ToString();
}
Thread.CurrentThread.CurrentCulture = PageCulture;
Thread.CurrentThread.CurrentUICulture = PageCulture;
}
{
if (Session["theme"]!=null)
{
Page.Theme = Session["theme"].ToString();
}
Thread.CurrentThread.CurrentCulture = PageCulture;
Thread.CurrentThread.CurrentUICulture = PageCulture;
}
现在我们已经达到了切换主题与文化的目的,但在运行的过程中,还有一点小问题。
![Smile](http://localhost:99/emoticons/emotion-1.gif)
就是比如:我新建了一个default页面,让他自动产生三个资源文件,文件名为:
default.aspx.zh-CN.resx
default.aspx.zh-TW.resx
default.aspx.en-US.resx
设置好后,运行,发现并不能切换文字效果,比如页面中有个label,其设置meta:resourcekey="Label1Resource1",当我切换文化时,并不能获取相应的资源文件。
而当我把default.aspx.zh-CN.resx改为default.aspx.resx时,运行正常!
![Surprise](http://localhost:99/emoticons/emotion-3.gif)
![Idea](http://localhost:99/emoticons/emotion-55.gif)
很奇怪。。。
现在还有一个问题没有解决。
就是我这里存储的theme与culture都是在session中,而我想把它放入profile中,达到个性化目的,
我一开始是这样做的,在web.config文件中加入:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
然后在master.cs中设置profile属性值。而下一步是我必须把profile里面设置的theme与culture值取出来,但在pagebase类中并没有profile这个实例对象,那该怎么取呢?高手帮帮忙!