|
 |
资料搜索 |
|
|
|
|
|
|
|
 |
相关文章 |
|
|
|
|
|
|
|
|
|
|
| [ 来源:CSDN | 作者:无从考证 | 时间:2005-11-11 12:22:36 | 浏览:人次 ] | |
|
protected override void CreateChildControls() { //加入AdRotator广告控件 ad = new AdRotator(); ad.AdvertisementFile = "AdBanners/ad.xml"; ad.BorderWidth = 0; ad.AdCreated += new AdCreatedEventHandler(this.OnAdCreated); this.Controls.Add(ad);
this.Controls.Add(new LiteralControl("<br>"+"当前广告链接为:")); //加入Label控件 lblAdText = new Label(); lblAdText.ForeColor = Color.Red; this.Controls.Add(lblAdText); } private void OnAdCreated(Object sender,AdCreatedEventArgs e) { this.lblAdText.Text = e.AlternateText; } } //接着是Logon public class Logon : Control,INamingContainer { private string strConnString = "server=(local)\Feidao;database=aspcn;Trusted_Connection=yes"; private Label lblMsgShow; private TextBox tbUserName,tbPasswd; public String UserName { get { return tbUserName.Text; } set { tbUserName.Text = value; } }
protected override void CreateChildControls() { //添加HTML标签 this.Controls.Add(new LiteralControl("<table><tr><td colspan="2" align="center"><b>登陆窗口</b></td></tr> <tr><td colspan="2" align="center">")); //添加MsgShow Label控件 lblMsgShow = new Label(); lblMsgShow.ForeColor = Color.Red; this.Controls.Add(lblMsgShow); this.Controls.Add(new LiteralControl("</td></tr><tr><td>用户名:</td><td>")); //添加UserName与Passwd TextBox控件 tbUserName = new TextBox(); this.Controls.Add(tbUserName); this.Controls.Add(new LiteralControl("</td></tr><tr><td>密码:</td><td>")); tbPasswd = new TextBox(); tbPasswd.TextMode = TextBoxMode.Password; this.Controls.Add(tbPasswd); this.Controls.Add(new LiteralControl("</td></tr><tr><td>")); //添加BtnSubmit Button控件 Button btnSubmit = new Button(); btnSubmit.Text = "登陆"; btnSubmit.Click += new EventHandler(this.Submit_Click); this.Controls.Add(btnSubmit); this.Controls.Add(new LiteralControl("</td></tr></table>")); } //显示完毕 private void Submit_Click(Object sender,EventArgs e) { SqlConnection MyConn = new SqlConnection(strConnString); MyConn.Open(); string strUserName,strPassword,strSelect; strUserName = tbUserName.Text; strPassword = tbPasswd.Text; strSelect = "select * from bbs_user where id=’"+strUserName+"’ and password=’"+strPassword+"’"; SqlCommand MyComm = new SqlCommand(strSelect,MyConn); SqlDataReader dr = MyComm.ExecuteReader(); if(dr.Read()) { //登陆成功 this.lblMsgShow.Text = "登陆成功"; } else { //登陆不成功 this.lblMsgShow.Text = "登陆不成功"; } dr.Close(); MyConn.Close(); } } //最后是Footer public class Footer : Control,INamingContainer { private string _UserName,_Purview;
public string UserName { get { return _UserName; } set { _UserName = value; } }
public string Purview { get { return _Purview; } set { _Purview = value; } }
public Footer() { _UserName = "游客"; _Purview = "无"; }
protected override void CreateChildControls() { this.Controls.Add(new LiteralControl("用户名:")); Label lblUserName = new Label(); lblUserName.ForeColor = Color.Red; lblUserName.Font.Name = "Arial"; lblUserName.Text = this.UserName; this.Controls.Add(lblUserName); //this.Controls.Add(new LiteralControl("nbsp;"));
this.Controls.Add(new LiteralControl("权限:")); Label lblPurview = new Label(); lblPurview.ForeColor = Color.Red; lblPurview.Font.Name = "Arial"; lblPurview.Text = this.Purview; this.Controls.Add(lblPurview); } } }
上面和程序是将需要实现的功能,全部导入了自定义控件。程序中可以看到,在aspcn命名空间中包含三个类(Header,Logon,Footer),这三个类正是构架三个主体部分。
要使用自定义控件,还必须将原代码进行编译。
csc /t:library /out:aspcn.dll /r:System.Data.dll,System.Web.dll,System.Drawing.dll CustomControls.cs
C#程序编译指令的用法,本人在此也不再重复。需要注意的是编译的文件名,必须与控件中namespace的名字一致。
编译后的dll,仍然不能使用,我们必须将其放到.Net平台中最著名的目录--/bin中,bin目录(如果不存在,可以自行建立)存放的是当前虚拟目录中所有使用自定义控件以及组件,CLR在执行ASP.Net程序时会自动搜索此目录中的文件,以找到与ASP.Net程序相匹配的Namespace、Class 以及Assembly。
当我们将程序编译好的aspcn.dll放入/bin目录后,这个自己编写的Server控件便可以使用了。 (需要声明一下,由于编写Server控件时不能使用Session等变量,以至无法做到两个class之间的通信,因此在缺省状态下Footer控件并不能像前面的程序一样随Session内容发生改变,不过可以通过普通操作Server控件的方法来操作相应的属性达到相同的效果,此处为节约版面,未采用) 下面再来看看主体Web Form的程序内容:
<% @ Register TagPrefix="aspcn" Namespace="aspcn" Assembly="aspcn" %> <html> <head> <title></title> </head> <body> <form runat="server"> <aspcn:Header id="MyHeader" runat="server" /> <aspcn:Logon id="MyLogon" runat="server" /> <aspcn:Footer id="MyFooter" runat="server" /> </form> </body> </html>
怎么样,相当简单明了吧。 引用我们自定义的控件,也相当简洁,只需将Register指令的TagPrefix、Namespace、Assembly属性全部设定为aspcn。
至此,ASP.Net中三种代码与页面构架分离的方法已经介绍完毕。
三种方法各有优劣,本人比较倾向于使用用户控件与CodeBinde技术结合使用,因为他们均不需要编译,相对来说更容易使用,如果您要保护你的代码,自定义控件则当然是您最佳的选择。
希望本文对您的编程有所帮助。
|
|
|
|
|
|
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
|
|
|
|
|
栏目编辑: 设计风 |
责任编辑: 简若宁 |
|
|
原始作者: 无从考证 |
录入时间: 2005-11-11 12:22:36 |
|
|
信息来源: CSDN |
投稿信箱: Edu#chinaz.com |
|
|
|
| |
|