ASP.Net中程序构架与程序代码的分离
this.Controls.Add(new LiteralControl(+当前广告链接为:));
//加入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(登陆窗口 ));
//添加MsgShow Label控件
lblMsgShow = new Label();
lblMsgShow.ForeColor = Color.Red;
this.Controls.Add(lblMsgShow);
this.Controls.Add(new LiteralControl(用户名:));
//添加UserName与Passwd TextBox控件
tbUserName = new TextBox();
this.Controls.Add(tbUserName);
this.Controls.Add(new LiteralControl(密码:));
tbPasswd = new TextBox();
tbPasswd.TextMode = TextBoxMode.Password;
this.Controls.Add(tbPasswd);
this.Controls.Add(new LiteralControl());
//添加BtnSubmit Button控件
Button btnSubmit = new Button();
btnSubmit.Text = 登陆;
btnSubmit.Click += new EventHandler(this.Submit_Click);
this.Controls.Add(btnSubmit);
this.Controls.Add(new LiteralControl());
}
//显示完毕
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、Namespace、Assembly属性全部设定为aspcn。
至此,ASP.Net中三种代码与页面构架分离的方法已经介绍完毕。
三种方法各有优劣,本人比较倾向于使用用户控件与CodeBinde技术结合使用,因为他们均不需要编译,相对来说更容易使用,如果您要保护你的代码,自定义控件则当然是您最佳的选择。
希望本文对您的编程有所帮助。
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论