网站首页站长博客下载中心域名交易站长论坛域名主机免费电邮免费域名中文排行排名查询站长书库书籍教程下载
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
学院首页 网络编程 网页设计 图形图象 数 据 库 服 务 器 网络媒体 网络安全 个人专栏 站长CLUB 业界新闻 信息公告
 当前位置:首页 >> 网络编程 >> NET专区 >> 正文
公告通知
返回上级列表
资料搜索
相关文章
用户自定义控件的应用
c#.net常用函数和方法集
在VB中使用水晶报表的一种简易编
C#调用父类的父类的方法
浏览.NET Framework 2.0 类型库中
为.Text Blog 添加 计数器
编程实现邮件地址有效性检测 
VB/VB.NET/C#导出到Excel的方法
c#高性能在WEB端产生验证图片
用System.Web.Caching.Cache保存
ASP.Net中程序构架与程序代码的分离
[ 来源:CSDN | 作者:无从考证 | 时间:2005-11-11 12:22:36 | 浏览:人次 ]
收藏到新浪ViVi 收藏到365KEY 收藏到我摘  字号选择〖    〗/ 双击滚屏 单击停止  
进行事件处理是定义在一个类中的(本例中是Aspcn,注意大小写),由于需要与Web Forms相关联,所以此类还必须继承Page类。

分析程序,大家可以看到程序中对事件的处理操作是与普通的未进行代码分离的程序是一样的,并没有什么特别的地方。(本人在程序中已经给出的相关注释,相信对大家理解程序有所帮助)

使用CodeBehind技术后,大家需要多写一些代码,比如声明控件等,也许大家很不喜欢多写这样的代码,但是大家也必须看到使用了CodeBehind技术后,主程序的可读性大大增加了。在Example1.aspx中相信大家很快就可以区分页面构架的各个部分,大家想想这些构架如果在其它技术是否能看得如此清楚?
(这里的程序只做演示用,呵呵,大家可不要抓我什么引号漏洞这些小辫子哟)

2 用户控件(UserControl)
CodeBehind技术真正实现了代码与构架的分离,比以前的技术前进了一大步,但是它的缺陷也是显而易见的,比如主页面中部那个登陆区,如果内容很多,HTML显示代码的依然会占用很大的区域,程序的可读性依然会降低。

ASP.Net也提供了解决办法,这就是用户控件。


用户控件我们可以将其视为不用编译的Server控件。即然是控件,那么就肯定会遵从控件的使用方法。我们将Example1.aspx中的每个Panel整体看成为一个控件,因此Example1.aspx的主体部分通过使用用户控件便可以减少为只有三行:

<% @ Register TagPrefix="aspcn" TagName="Header" Src="UserControls/Header.ascx" %>
<% @ Register TagPrefix="aspcn" TagName="Logon" Src="UserControls/Logon.ascx" %>
<% @ Register TagPrefix="aspcn" TagName="Footer" Src="UserControls/Footer.ascx" %>
<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>

执行这个程序,其运行结果与使用CodeBehind技术的结果是一样的,但是现在的ASP.Net程序更加容易区分页面构架了。

<aspcn:Header id="MyHeader" runat="server" />
<aspcn:Logon id="MyLogon" runat="server" />
<aspcn:Footer id="MyFooter" runat="server" />

这三行代码,使用了三个用户控件,这么少的代码大家一眼就可以清楚的看到页面被分为三个部分。

要使用用户控件就必须使用Register指令,TagPrefix属性定义是的一个Namespace的名字,以保证它在这个页面的唯一性;TagName属性是在定义一个类(class)的别名,由于用户控件执行时是被CLR编译成为类来执行的,所以就必须给本程序中每个用户控件一个唯一的名字,以便于大家区分;Src属性则是具体指出了使用的用户控件的文件名(用户控件均以.ascx结尾)。

用户控件的使用与普通Server控件一样:
<namespace:class ... runat="server" />
namespace表示定义的命名空间,class则是相应的类名,具体的使用例子有:
<aspcn:Logon id="MyLogon" runat="server" />

下面是用户控件显示程序中所使用的用户控件的具体内容:

Header.ascx(Header用户控件)

<Script Language="C#" Runat="Server">
private void AdCreated(Object src,AdCreatedEventArgs e)
{
lblAdText.Text = e.AlternateText;
}
</script>
<asp:AdRotator id="ad" AdvertisementFile="..AdBannersad.xml" BorderWidth="0" OnAdCreated="AdCreated" runat="server" /><br>
当前广告链接:<asp:Label id="lblAdText" ForeColor="red" runat="server" />

Logon.ascx(Logon用户控件)

<% @ Import Namespace="System.Data" %>
<% @ Import Namespace="System.Data.SqlClient" %>
<Script Language="C#" Runat="Server">
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();
}
</script>
<table>
<tr><td colspan="2" align="center"><b>登陆窗口</b></td></tr>
<tr><td colspan="2" align="center"><asp:Label id="lblMsgShow" ForeColor="red" runat="server" /></td></tr>
<tr><td>用户名:</td><td><asp:TextBox id="tbUserName" runat="server" /></td></tr>
<tr><td>密码:</td><td><asp:TextBox id="tbPasswd" TextMode="Password" runat="server" /></td></tr>
<tr><td><asp:Button id="btnSubmit" Text="登陆" OnClick="Submit_Click" runat="server" /></td></tr>
</table>

Footer.ascx(Footer用户控件)

<Script Language="C#" Runat="Server">
private void Page_Load(Object src,EventArgs e)
{
if(Session["UserName"]!=null)
{
lblUserName.Text = (string)Session["UserName"];
lblPurview.Text = (string)Session["Purview"];
}
}
</script>
用户名:<asp:Label id="lblUserName" Font-Name="Arial" ForeColor="red" Text="游客" runat="server" />

权限:<asp:Label id="lblPurview" Font-Name="Arial" Text="无" ForeColor="red" runat="server" />

每个控件包含有自已的显示代码以及相应的程序代码。

我们可以将一些常用的功能制作成为固定的用户控件,当需要时,我们就可直接拿来使用,而不需要使用烦人的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;

本新闻共3页,当前在第2页  1  2  3  


[发送给好友]  [打印本页]  [关闭窗口]  [返回顶部]   转载请注明来源:http://edu.chinaz.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
栏目编辑: 设计风 责任编辑: 简若宁
原始作者: 无从考证 录入时间: 2005-11-11 12:22:36
信息来源: CSDN 投稿信箱: Edu#chinaz.com
设为首页 - 加入收藏 - 关于我们 - 广告服务 - 版权申明 - 友情链接 - 联系方式 - 总编信箱 - 会员投稿