模拟Asp.Net Forums实现可以换皮肤的控件
来源:互联网 发布:新浪短域名生成 编辑:程序博客网 时间:2024/04/29 00:30
为了帮助您理解《Asp.Net Forums2.0深入分析》之 Asp.Net Forums是如何实现代码分离和换皮肤的,现在我们一起来写一个代码分离带换皮肤功能的登陆页面:
第一步:新建ThemeDemo项目
第二步:添加基类SkinnedWebControl.cs
第三步:创建Themes目录,并创建两个用户控件文件Login.ascx和Login1.ascx。布局样式不同,但是都必须包含以下控件:
TextBox Username
TextBox Password
Button LoginButton
Label Result
Login.ascx
Login1.ascx
第四步:创建Login控件Login.cs
第五步:新建两个aspx页,分别把两种风格的登陆控件加入。
Login.aspx
Login1.aspx
___html_
最后,分别运行看看效果:)
源代码下载
http://webuc.net/download/ThemeDemo.rar
第一步:新建ThemeDemo项目
第二步:添加基类SkinnedWebControl.cs
复制 保存
using System;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.IO;namespace WebUC.ThemeDemo.Controls{ [ ParseChildren(true) ] /// <summary> /// 换皮肤控件基类 /// </summary> public abstract class SkinnedWebControl : WebControl, INamingContainer { string skinFilename = null; protected override void CreateChildControls() { Control skin; // 装载用户控件文件 skin = LoadSkin(); // 初始化控件和对控件绑定 InitializeSkin(skin); Controls.Add(skin); } /// <summary> /// 装载用户控件文件 /// </summary> /// <returns></returns> protected Control LoadSkin() { Control skin; // 用户控件文件默认放在Themes目录下 string skinPath = "Themes/" + SkinFilename; // 是否定义了用户控件文件? if (SkinFilename == null) throw new Exception("必须定义SkinFilename属性,指定用户控件文件路径"); // 通过Page.LoadControl(defaultSkinPath)方法,从用户控件文件中获取 UserControl 对象 try { skin = Page.LoadControl(skinPath); } catch (FileNotFoundException) { throw new Exception("用户控件文件未找到!"); } return skin; } /// <summary> /// 初始化控件,并绑定控件数据 /// </summary> /// <param name="skin"></param> protected abstract void InitializeSkin(Control skin); /// <summary> /// 用户控件文件路径 /// </summary> public string SkinFilename { get { return skinFilename; } set { skinFilename = value; } } }}
第三步:创建Themes目录,并创建两个用户控件文件Login.ascx和Login1.ascx。布局样式不同,但是都必须包含以下控件:
TextBox Username
TextBox Password
Button LoginButton
Label Result
Login.ascx
阅读 编辑 运行 复制 保存
<P>登陆页的默认皮肤样式</P><P>用户名:<asp:TextBox id="Username" runat="server"></asp:TextBox></P><P>密 码:<asp:TextBox id="Password" runat="server" TextMode="Password"/></P><P><asp:Button id="LoginButton" runat="server" Text="登陆"/></P><P><asp:Label id="Result" runat="server"/></P>
Login1.ascx
阅读 编辑 运行 复制 保存
<P>登陆页的皮肤样式1</P>用户名:<asp:TextBox id="Username" runat="server"/>密 码:<asp:TextBox id="Password" runat="server" TextMode="Password"/> <asp:Button id="LoginButton" runat="server" Text="登陆"/><asp:Label id="Result" runat="server"/>
第四步:创建Login控件Login.cs
复制 保存
using System;using System.Web;using System.Web.UI.WebControls;namespace WebUC.ThemeDemo.Controls{ /// <summary> /// 登陆控件,继承自SkinnedWebControl /// </summary> public class Login : SkinnedWebControl { string skinFilename = "Login.ascx"; // 指定默认皮肤样式 TextBox username; // 帐号输入框 TextBox password; // 密码输入框 Button loginButton; // 登陆按钮 Label result; // 显示登陆结果 public Login() { if (SkinFilename == null) SkinFilename = skinFilename; } /// <summary> /// 重写InitializeSkin,初始化控件和对控件进行绑定 /// </summary> /// <param name="skin"></param> protected override void InitializeSkin(System.Web.UI.Control skin) { // 查找ascx页中ID是username的textbox控件 username = (TextBox) skin.FindControl("Username"); // 绑定数据 username.Text = "demo"; // 查找ascx页中ID是password的textbox控件 password = (TextBox) skin.FindControl("Password"); // 绑定数据 password.Attributes.Add("value", "demo"); // 初始化Result控件 result = (Label) skin.FindControl("Result"); // 找到登陆按钮 loginButton = (Button) skin.FindControl("LoginButton"); loginButton.Click += new System.EventHandler(LoginButton_Click); // 绑定登陆按钮的Click事件 } /// <summary> /// 响应登陆按钮事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void LoginButton_Click(Object sender, EventArgs e) { if (username.Text == "demo" && password.Text == "demo") result.Text = "<font color='blue'>登陆成功!"; else result.Text = "<font color='red'>登陆失败,用户名密码不匹配!"; } }}
第五步:新建两个aspx页,分别把两种风格的登陆控件加入。
Login.aspx
复制 保存
<%@ Register TagPrefix="uc" Namespace="WebUC.ThemeDemo.Controls" Assembly="ThemeDemo" %><HTML> <HEAD> <title>换皮肤控件测试——默认皮肤</title> </HEAD> <body> <form runat="server"> <uc:Login runat="server"/> </form> </body></HTML>
Login1.aspx
复制 保存
<%@ Register TagPrefix="uc" Namespace="WebUC.ThemeDemo.Controls" Assembly="ThemeDemo" %><HTML> <HEAD> <title>换皮肤控件测试——另一皮肤</title> </HEAD> <body> <form runat="server"> <uc:Login runat="server" SkinFilename="Login1.ascx"/> </form> </body>
___html_
最后,分别运行看看效果:)
源代码下载
http://webuc.net/download/ThemeDemo.rar
- 模拟Asp.Net Forums实现可以换皮肤的控件
- 模拟Asp.Net Forums实现可以换皮肤的控件
- ASP.NET FORUMS换肤流程
- Asp.net中换皮肤
- Asp.Net实现采用切换CSS换皮肤
- 《Asp.Net Forums2.0深入分析》之 Asp.Net Forums是如何实现代码分离和换
- 《Asp.Net Forums2.0深入分析》之 Asp.Net Forums是如何实现代码分离和换
- 网页换皮肤的实现
- 网页换皮肤的实现
- asp.net forums 的Web设计模式
- asp.net forums中定时器的应用
- asp.net forums中定时器的应用
- asp.net forums中定时器的应用
- c#.net简单的换皮肤代码
- 直接通过User Control生成HTML-asp.net页面的换皮肤方案
- ASP.NET Forums N层架构实现,以功能举例
- Asp.Net下通过切换CSS换皮肤
- Asp.Net下通过切换CSS换皮肤
- NetBeans IDE 开发EJB3 的HELLO工程
- asp.net中静态变量的使用。
- 三亚之行,美丽的海岸,度假的天堂
- SQL执行者3.0发布!欢迎大家来评测!
- 今天学LinQ之 LinQ to SQL 片段
- 模拟Asp.Net Forums实现可以换皮肤的控件
- The evolution of self-defense technologies in malware
- 一个漂亮好用的模拟下拉框
- NDIS HOOK 防火墙实现关键技术
- ARP双向绑定
- Gloomy对Windows内核的分析
- Linux操作系统下Sudo命令的使用方法说明
- 31个用来测试你网站各项性能的免费在线工具
- mysql bin日志文件清除sh