用户控件
Web用户控件是一种复合服务器控件,创建Web用户控件可以在应用程序中重复地使用该复合控件,可以提高应用程序的开发速度,开发Web用户控件可以采用类似于ASP.NET页面开发技术进行开发,这样可以使程序员更方便、快捷开发出更具有实用价值的服务器控件。 Web用户控件与ASP.NET页面(.aspx文件)相似,同样具有用户界面页和代码页。可以采用与创建ASP.NET页面相似的开发技术,创建并开发Web用户控件。在创建Web用户控件时,可以添加各种标准服务器控件,而且还可以添加各种数据绑定控件。
17.1 用户控件的优点 为什么要使用用户控件呢?在站点开发过程中,由于多个页面要使用相同的页面控件,甚至需要使用相应的事件或方法。许多读者很可能都是采用复制的方法,将其复制粘贴到不同页面中。但通过用户控件,就不需要通过复制粘贴方法将控件应用到页面中。可以像一般服务器控件一样,将控件拖动到页面中,就可以应用该复合控件。这样可以将用户控件的重复性应用到不同页面中,而且当变更用户控件时,同时也将更新变更所有引用该控件的Web页面。
17.2 Web用户控件的使用 创建Web用户控件,通常是采用ASP.NET页面开发技术、JavaScript编程语句实现一些个性化综合控件,方便应用程序重复性使用该控件。 用户控件是以后缀名为“.ascx”的文件来存储其开发设计的。在任何时候看到该后缀,就可以知道程序员正在处理Web用户控件。
在用户控件添加事件属性,是为了用户控件能更好地结合JavaScript进行程序开发而添加创建的。用户控件一般是通过Attributes对象属性的Add方法添加一个事件属性。该对象属性的基本语法如下代码所示。 Control.Attributes.Add(Key,Value);
Web用户控件虽然是一个ascx文件,但该文件就是一个控件。既然是一个控件,就应该有控件属性。在没有设置用户控件属性时,Web用户控件只包括EnableTheming、Visible、EnableViewState、runat、id这5个属性。如果没有定义用户控件的属性,该用户控件就不能由用户定义,如Text、Width等属性。 许多服务器控件都有定义事件。通过控件的某事件,完成服务器的某项任务操作。例如,按钮通过Click事件,完成单击按钮执行的任务操作。Web用户控件同样需要创建事件,来实现某项任务操作。但Web用户控件的事件,常常为了执行其子控件的某一事件操作。
在数据绑定控件,可以通过其DataSource对象属性进行动态数据绑定。那么Web用户控件是否也可以实现这样的数据绑定呢?答案是肯定的。创建一个DataTable数据类型的用户属性,通过该属性就可以绑定用于用户控件中的数据绑定控件。
在用户控件中还可以动态设置客户端属性及样式。例如,实现GridView控件数据绑定后,呈现奇数行与偶数行进行隔色。鼠标选择某一行时其颜色也会改变。单击某一行时,则会把该行的键值存入Label控件中,将键对应的数据存入TextBox控件中。
前面曾讲解过,在用户控件中可以定义控件事件。通过控件事件可以处理子控件的事件。这里的子控件事件处理,是指该子控件的事件由用户控件内部处理控件事件。引用该控件的页面无法控制该事件,也无须对该事件进行程序开发。
17.3 举例 1. 添加“Web 用户控件”,默认命名为:WebUserControl1.ascx。 2. 在控件中添加一个repeater控件,名字为repeater1。 3. 对应代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using WebApplication.DAL.DataSet2TableAdapters;
namespace WebApplication { public partial class WebUserControl1 : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // GetDataByType对应的sql为:SELECT "TYPE", NAME FROM tblname where "TYPE"=:type var data = new KEYRANGETableAdapter().GetDataByType(type); Repeater1.DataSource = data; Repeater1.DataBind(); } }
public string type { get; set; }
} }
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication.WebUserControl1" %> <asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> TYPE: <%#Eval("TYPE") %>, 名称:<%#Eval("NAME") %><br> </ItemTemplate> </asp:Repeater>
4. 在WebForm中使用: <uc1:WebUserControl1 ID="WebUserControl1" type="01" runat="server" /> <uc1:WebUserControl1 ID="WebUserControl2" type="04" runat="server" /> 分别查询出TYPE为“01”和“04”的记录,按照Repeater1中定义的格式显示。
浙公网安备 33010602011771号