ASP.NET用户控件的创建和使用

1、 Web用户控件概述

Web用户控件是一种服务器控件,它与ASP.NET页面有着同样的所见即所得的特点,并以.ascx为扩展名存储为文本文件,同样具有自己的界面和代码,它比服务器控件提供了更多的功能,为创建具有复杂的用户界面元素代来极大的方便

1) Web控件与普通控件比较

1)用户控件的文件扩展名为.ascx

2) 没有@Page指令,而是包含@Control指令,该指令对配置及其他属性进行定义

3)不能作为独立文件运行,而必须象处理任何控件一样,将它们添加到ASP.NET页中

4)用户控件没有html,body,form元素,但同样可以在用户控件上使用HTML元素和WEB控件

2) 用户控件的优点

1)可能将常用的内容或者控件以及控件的运行程序逻辑,设计为用户控件,然后重复使用,例如网页上的导航栏,几乎每个页都需要相同的导航栏,这时可以将其设计为用户控件,在多个页中使用

2)如果网页内容需要改变,只需要修改用户控件中的内容即可

总之,对于页面上重复使用的元素,如导航,站内搜索,用户注册和登录等,都可以将其代码封装到WEB用户控件中,以减少代码量,此外,使用用户控件的高速缓存功能,可以提高页面的性能,因此母板页其实就是一种用户控件

3) 应该注意的问题

1)不能将用户控件放入网站的App_Code文件夹中,否则运行时将出错,用户控件属于System.Web.UI.UserControl类,它直接继承于System.Web.UI.Control

2) 创建好用户控件后,必须添加到其他WEB页中才能显示出来,不能直接单独显示运行,不能设置为”起始页“

如下:

Code

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Sample.ascx.cs" Inherits="ASP.NET_3._5.UC.Sample" %>

<asp:Label ID="ColumnName" runat="server"asp:Label>

<asp:TextBox ID="Condition" runat="server"></asp:TextBox>

<asp:Button ID="Search" runat="server" Text="搜索"/>

2、创建一个搜索数据的用户控件:

1.添加一个Sample.ascx的文件

2.从工具箱中拖入1个Lable控件,设置ID为:ColumnName

3.从工具箱中拖入1个TextBox控件,设置其属性ID为:Condition,

4.从工具箱里拖入一个Button控件,并设置其属性ID为:Search,Text为搜索。

看“源”文件如下:

Code

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Sample.ascx.cs" Inherits="ASP.NET_3._5.UC.Sample" %>

<asp:Label ID="ColumnName" runat="server"asp:Label>

<asp:TextBox ID="Condition" runat="server"></asp:TextBox>

<asp:Button ID="Search" runat="server"  Text="搜索"/>

5,打开Search.ascx.cn文件看后置代码,定义如下属性

Code

public string lableText {get;set;}  //提示用户输入什么样的查询条件

public string connectionString { get; set; }    //连接数据库

public GridView resultGridView { get; set; }    //要填充的GridView控件

public string tableName { get; set; }    //要查询数据库中的数据表名

public string columnCondition { get; set; }    //根据哪一条进行查询

public string errorMessage { get; set; }    //错误信息

6.定义一个函数,SearchResult(),该函数将会根据用户输入的查询条件查询到数据并把数据集返回,该函数要利用到数据库访问知识,代码如下:

Code

private DataTable SearchResult() {

System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connectionString);

string strsql = "select * from " + tableName + " where " + columnCondition + " like '%" + this.Condition.Text.ToString() + "%'";

conn.Open();

System.Data.OleDb.OleDbDataAdapter ada = new System.Data.OleDb.OleDbDataAdapter(strsql,conn);

System.Data.DataTable dataTable = new DataTable();

ada.Fill(dataTable);

conn.Close();

return dataTable;

}

7.打开Search.ascx文件,双击Search按钮,则在Search.ascx.cs文件中生成按钮事件,这个事件中将绑定数据到GridView中。

1   protected void Search_Click(object sender, EventArgs e)

2         {

3             resultGridView.DataSource = SearchResult().DefaultView;

4             resultGridView.DataBind();

5         }

6

8.在Page_Load事件中加入初始化ColumnName标签代码,

protected void Page_Load(object sender, EventArgs e)

{

this.ColumnName.Text = this.lableText;

}

这样就创建好了一个搜索功能的用户控件,这个控件在哪个页面需要使用时,只需要加入到ASP.ENT页面就行了,像使用WEB控件一样。

用户控件的使用:

使用用户控件和使用web控件一样,拖入页面,然后设置他的属性就是了。

就拿刚才的搜索功能的用户控件来说,

1.在Default.aspx页面拖入用户控件

如下代码,我们在页面添加了一个ID为Sample1的用户控件和一个ID为:GridView1的GridView,并绑定数据。

Code

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ASP.NET_3._5._Default" %>

<%@ Register src="UC/Sample.ascx" tagname="Sample" tagprefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>用户自定义控件--搜索功能</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<uc1:Sample ID="Sample1" runat="server" lableText="城市:"/>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">

<Columns>

<asp:BoundField DataField="id" HeaderText="序号"/>

<asp:BoundField DataField="name" HeaderText="姓名"/>

<asp:BoundField DataField="city" HeaderText="城市"/>

<asp:BoundField DataField="phone" HeaderText="电话"/>

<asp:BoundField DataField="carrier" HeaderText="职业"/>

<asp:BoundField DataField="positon" HeaderText="职位"/>

</Columns>

</asp:GridView>

</div>

</form>

</body>

</html>

设置页面加载事件

因为页面已经添加了控件,所以后台代码就可以设置控件的属性的值了,

Sample1.connectionString 设置连接字符串,

Sample1.columnCondition 设置按哪个字段查询

Sample1.tableName = "basic" 设置查询哪个表,

Sample1.resultGridView = this.GridView1。设置控件的GridView

Code

protected void Page_Load(object sender, EventArgs e)

{

Sample1.connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\YtbWork\donet\ASP.NET 3.5\ASP.NET 3.5\App_Data\db1.mdb";

Sample1.columnCondition = "city";

Sample1.resultGridView = this.GridView1;

Sample1.tableName = "basic";

}

因为我们在控件的按钮事件中有如下代码,所以,当点击搜索,就会绑定数据到GridView

protected void Search_Click(object sender, EventArgs e)

{

resultGridView.DataSource = SearchResult().DefaultView;

resultGridView.DataBind();

}

分析用户控件的创建和使用:

<%@ Register src="UC/Sample.ascx" tagname="Sample" tagprefix="uc1" %>

<uc1:Sample ID="Sample1" runat="server" lableText="城市:"/>

转载于:https://blog.51cto.com/4068205/1131398

ASP.NET用户控件的创建和使用相关推荐

  1. 有效利用ASP.NET用户控件的事件委托

    当你在开发ASP.NET网站,对用户控件一定并不陌生.当多个页面都使用相同或相似的设计时,使用用户控件可以提高开发效率! 但往往你会因为用户控件有少许不同的要求而感觉到烦恼.比如说在开发后台处理页面的 ...

  2. 如何动态创建asp.net 用户控件

    this.PlaceHolder1.Controls.Add(new TextBox());  //可以 this.PlaceHolder1.Controls.Add(new MyContorl); ...

  3. Asp.net 用户控件和自定义控件注册

    在ASPX页中注册用户控件的方法 <%@ Register Src="ListPicker.ascx" TagName="ListPicker"  Tag ...

  4. Asp.Net用户控件编程实例

    新建一个Asp.Net空网站:加入一个Default页: 添加一个web用户控件: 解决方案结构如下: 用户控件页面添加一个Label: <%@ Control Language="C ...

  5. ASP.NET 用户控件自定义属性、方法、事件

    原文件链接:http://www.cnblogs.com/stalwart/archive/2010/12/16/1908302.html 之前一直写MVC的,本来就不大喜欢.NET中的服务器控件,里 ...

  6. asp.net 用户控件

    页面调用(.aspx) <%@ Register Src="~/myspace/UC/Friend_Diary.ascx" TagPrefix="uc" ...

  7. VS2008 Tips #008 如何创建ASP.NET Web 用户控件并包含在Web 页面中

    在 Visual Web Developer 中创建 ASP.NET Web 用户控件就像 ASP.NET Page 页面一样简单. 以下是创建步骤: 1.打开您想添加用户控件的站点. 2.右键点击站 ...

  8. ASP.NET 实践:使用用户控件实现 Web 部件的个性化

    这个实践示范了如何创建依赖于 Web 部件个性化的 ASP.NET 用户控件,并在 Web 页面中提供用户特定的默认值. ASP.NET Web 部件控件集允许你建立拥有模块化布局的 Web 页面,并 ...

  9. 风影ASP.NET基础教学 6用户控件

    在Web系统开发中,经常会有一些功能模块在很多的地方重复出现,例如新闻管理系统中的用户登陆/注册.推荐新闻.热点新闻和页面上的一些固定栏目等.为了提高代码的重用性,减少系统的开发与维护成本,一般会把这 ...

最新文章

  1. eclipse使用git合并_Eclipse中使用git
  2. python3.6.8卸载_Mac 卸载 彻底删除 自己下载的 python 3
  3. IAR新建stm32工程,完美移植stm32标准库(附源码)
  4. (转)解决fasterxml中string字符串转对象json格式错误问题(无引号 单引号问题)...
  5. Android 8.0 学习(17)---Android8.0中对指纹的新要求
  6. springboot undertow替换tomcat方式
  7. (一) CPU 性能测试 (压力)
  8. 微信小程序登陆\code详解
  9. 解决win10笔记本电脑Wifi频繁自动断开
  10. mysql命令桌面壁纸_【upupoo动态桌面壁纸和mysql-jdbc.jar哪个好用】upupoo动态桌面壁纸和mysql-jdbc.jar对比-ZOL下载...
  11. lpad函数和rpad函数的用法
  12. QQ游戏基本通信机制(QQ游戏外挂编写)
  13. 移动硬盘提示格式化解决办法,未正确删除导致不能读取文件提示格式化解决方案
  14. 微软视窗的C++封装
  15. unity小技巧收集总结--自用(三)
  16. 传播动力学--SIR模型及其应用
  17. nodejs+Vue+Elementui的校园二手旧书交易交换平台sequelize
  18. 基于禁忌搜索算法的TSP问题求解matlab仿真
  19. pcmcia oracle vm vitualbox 虚拟机,virtualbox中调整虚拟机的硬盘大小 与 CentOS卡在进度条启动缓慢进不去解决办法...
  20. 7——18 day 24 35min 类属性

热门文章

  1. 鸿蒙2.0开始推送,华为OS首次登陆手机,亮点槽点都在这里
  2. 疫苗有效,先抛股票,今日官宣94.5%结果的Moderna高管早有信心
  3. 用上这个Python的Docker正式版镜像,你也能成为容器高玩
  4. 3D特效师可以下班了丨Science
  5. 谷歌出现新冠肺炎确诊病例,限制员工出行;比尔·盖茨:可能成百年不遇的大流行病...
  6. 七年终登Science封面:最强大脑皮层神经网络重建,揭示迄今哺乳动物最大神经线路图...
  7. ZJOI2019 Day2 游记
  8. 使用react全家桶制作博客后台管理系统
  9. CoreOS的Tectonic新发行版支持Kubernetes自我管理
  10. python基础第二天(day14)