ASP.Net中程序构架与程序代码的分离
(这里的程序只做演示用,呵呵,大家可不要抓我什么引号漏洞这些小辫子哟)
2 用户控件(UserControl)
CodeBehind技术真正实现了代码与构架的分离,比以前的技术前进了一大步,但是它的缺陷也是显而易见的,比如主页面中部那个登陆区,如果内容很多,HTML显示代码的依然会占用很大的区域,程序的可读性依然会降低。
ASP.Net也提供了解决办法,这就是用户控件。
用户控件我们可以将其视为不用编译的Server控件。即然是控件,那么就肯定会遵从控件的使用方法。我们将Example1.aspx中的每个Panel整体看成为一个控件,因此Example1.aspx的主体部分通过使用用户控件便可以减少为只有三行:
执行这个程序,其运行结果与使用CodeBehind技术的结果是一样的,但是现在的ASP.Net程序更加容易区分页面构架了。
这三行代码,使用了三个用户控件,这么少的代码大家一眼就可以清楚的看到页面被分为三个部分。
要使用用户控件就必须使用Register指令,TagPrefix属性定义是的一个Namespace的名字,以保证它在这个页面的唯一性;TagName属性是在定义一个类(class)的别名,由于用户控件执行时是被CLR编译成为类来执行的,所以就必须给本程序中每个用户控件一个唯一的名字,以便于大家区分;Src属性则是具体指出了使用的用户控件的文件名(用户控件均以.ascx结尾)。
用户控件的使用与普通Server控件一样:
namespace表示定义的命名空间,class则是相应的类名,具体的使用例子有:
下面是用户控件显示程序中所使用的用户控件的具体内容:
Header.ascx(Header用户控件)
private void AdCreated(Object src,AdCreatedEventArgs e)
{
lblAdText.Text = e.AlternateText;
}
当前广告链接:
Logon.ascx(Logon用户控件)
protected string strConnString = server=(local)\\Feidao;database=aspcn;Trusted_Connection=yes;
//定义UserControl的属性
public string UserName
{
get
{
return tbUserName.Text;
}
set
{
tbUserName.Text = value;
}
}
public string Password
{
get
{
return tbPasswd.Text;
}
set
{
tbPasswd.Text = value;
}
}
//事件处理
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())
{
//登陆成功
lblMsgShow.Text = 登陆成功;
Session[UserName] = dr[id].ToString();
Session[Purview] = dr[purview].ToString();
}
else
{
//登陆不成功
lblMsgShow.Text = 登陆不成功;
}
dr.Close();
MyConn.Close();
}
登陆窗口
用户名:
密码:
Footer.ascx(Footer用户控件)
private void Page_Load(Object src,EventArgs e)
{
if(Session[UserName]!=null)
{
lblUserName.Text = (string)Session[UserName];
lblPurview.Text = (string)Session[Purview];
}
}
用户名:
权限:
每个控件包含有自已的显示代码以及相应的程序代码。
我们可以将一些常用的功能制作成为固定的用户控件,当需要时,我们就可直接拿来使用,而不需要使用烦人的Crtl+C,Ctrl+V来复制、粘贴长长的一大堆代码。
用户控件不仅做到了程序代码与页面构架的分离,而且还增加了代码重用性。
3 自定义控件(Custom Control)
用户控件是很不错的选择,但是由于每个用户控件都是一个ascx文件,当这些控件很多时,它们的使用就显得比较零乱。此时我们便想可不可以将一些比较相似的控件整合起来,在程序中只需要引用一次,便全部搞定。这是个很不错的想法,我们把这个想法说得更加专业一些:将多个类(class)导入同一个命名空间(namespace)。呵呵,怎么样,这句话是不是有点有耳熟?大家快去查一查Server控件的定义,是不是发现这句话是...
我们下面就要接触如何写Server控件。编写Server控件并不是一件轻松容易的事情,需要对.Net平台有比较深的了解,适合于高级用户,因此这里本人也不会具体描述Server控件的编写步骤(要细细讲这个,非得写书不可)。请大家比较一下自定义控件源代码与用户控件的区别,作一些大致的了解:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace aspcn
{
//首先是Header
public class Header:Control,INamingContainer
{
private AdRotator ad;
private Label lblAdText;
protected override void CreateChildControls()
{
//加入AdRotator广告控件
ad = new AdRotator();
ad.AdvertisementFile = AdBanners/ad.xml;
ad.BorderWidth = 0;
ad.AdCreated += new AdCreatedEventHandler(this.OnAdCreated);
t
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论