用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心信息化信息技术

ASP.Net中程序构架与程序代码的分离

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 15:20:40
Example1.aspx中相信大家很快就可以区分页面构架的各个部分,大家想想这些构架如果在其它技术是否能看得如此清楚?

(这里的程序只做演示用,呵呵,大家可不要抓我什么引号漏洞这些小辫子哟)



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

上一页  [1] [2] [3]  下一页

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:14,765.63000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号