如果你有以下问题,建议你下载这个东东。
1. 希望网站能像Blog网站那样支持更换模板(Skin)。
2. 让开发人员和美工能各自独立工作,互不干扰。
3. 能动态增减页面的功能模块,而无需重新修改编译源代码。
等等...
=========================
Rainsoft Skin Library for ASP.NET 1.1
=========================
原理
原理很简单,通过HttpModule拦截页面访问请求,然后根据相关配置重写路径,使其跳转到Skin页面。
通过动态载入自定义控件来调整页面功能。
使用
1. 在Web.config文件中添加HttpModule配置。
2. 创建自定义控件,添加控件和功能代码,无需进行美化工作。
3. 在页面添加PlaceHolder控件用来载入自定义控件。
4. 在页面Page_Load方法中添加LoadAscxControl或者LoadAscxFromXml方法载入自定义控件。
问题
1. 模板(Skin)文件放在什么地方?
所有模板文件必须存放于 Skins 下的一个子目录中,子目录名就是SkinName,且模板文件路径和原文件相对应。
2. 如何制作模板文件?
将原文件(.aspx,不包含.cs)拷贝到模板目录中,并将第一行中的 Codebehind="***.aspx.cs" 删除,然后美工就可以编辑美化了。
注意不要修改控件名称。
3. skin.xml 是做什么用的?
我们可以通过配置文件载入自定义控件。这样我们只要在Page_Load中调用一次LoadAscxFromXml就可以了。
skin.xml中"*"表示每个页面都要用到。
4. 如何指定缺省模板?
在Global.cs中添加如下代码
protected void Application_Start(Object sender, EventArgs e)
{
Rainsoft.Web.Skin.DefaultSkinName = "a";
}
5. 如何为不同的Session或页面指定不同的模板?
可以在Global.cs中使用Skin.OnSkin事件。
protected void Application_Start(Object sender, EventArgs e)
{
Rainsoft.Web.Skin.OnSkin += new Rainsoft.Web.OnSkinHandler(Skin_OnSkin);
}
private void Skin_OnSkin(HttpContext context, out string skinName)
{
string page = context.Request.FilePath.ToLower();
if (page.EndsWith("default.aspx"))
skinName = "b";
else if (page.EndsWith("login.aspx"))
skinName = "a";
else
skinName = null;
}
6. 如何在不同的模板间增减功能?
将模板中不想加载的自定义控件对应的PlaceHolder标记删除就可以了。
可以参考Skins\b\Default.aspx和Skins\a\Default.aspx的区别。
7. 为什么模板页面的图片无法显示?
由于页面路径的重写,导致IE无法正确获取图片的路径,因此模板文件在发布的时候需要使用全路径或者使用<%=Rainsoft.Web.Skin.SkinPath%>来动态补全路径。可以参考Demo中的模板文件。另外还有<%=Rainsoft.Web.Skin.SitePath%>可供使用。
8. 这个Skin框架会破坏ASP.NET原有功能吗?
不会,使用了这个框架,身份安全验证、页面(自定义控件)缓存等功能都能正常使用。
注:页面和自定义控件的缓存指令也需要写入模板文件。具体参考Demo。
9. Skin中还包含其他什么功能?
SetDefaultButton 设置缺省按钮。这样我们在输入框中按回车键就可以指定触发哪个按钮的Click事件啦。
private void Page_Load(object sender, System.EventArgs e)
{
Skin.SetDefaultButton(txtPassport, btnLogin.ClientID);
Skin.SetDefaultButton(txtPassword, btnLogin.ClientID);
}
SmartNavigationEx 替代SmartNavigation的一个好东西,不会再有因为SmartNavigation的缺陷造成很多麻烦了。
NoCache 禁用页面Cache。
升级
2005-07-07
--------------------
1. 修正几个Bug。
2. 将Skin.Name改名为Skin.DefaultSkinName。
3. 并添加了其他几个属性,如Skin.CurrentSkinName。
4. 取消Skin.ChangeSkin方法。
2005-07-06
--------------------
发布
点击下载 本文作者:佚名 来源:http://www.rainsts.net/
CIO之家 www.ciozj.com 微信公众号:imciow