风影ASP.NET基础教学 7用户控件编程
下面我们使用“网站友情链接”的主要功能就是管理网站的各种友情链接地址,使这些友情链接能够显示在网站各个需要的地方,一般显示在网站的底部。为了实现链接显示,首先需要在项目中创建一个HyperLinkControl.ascx,并在该控件里添加一个HyperLink控件来显示链接。我们把HyperLink放在Panel里。
前端代码
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="HyperLinkControl.ascx.cs" Inherits="ASPNETTeach4.HyperLinkControl" %>
<asp:Panel ID="Panel1" runat="server" GroupingText="本站友情链接" EnableTheming="true" Width="400">
<asp:HyperLink ID="HyperLink1" runat="server" OnLoad="HyperLink1_Load">HyperLink</asp:HyperLink>
</asp:Panel>
后置代码
protected void HyperLink1_Load(object sender, EventArgs e)
{
HyperLink1.Text = "百度";
HyperLink1.NavigateUrl = "http://www.baidu.com";
}
我们在HyperLink控件的使用了加载事件,用来初始化数据。编写一个测试Page.运行一下效果。
这样编写已经达到了初步的效果,但是我们断点的时候会发现每次请求都会先执行页面的Page_load,然后执行用户控件的Page_Load事件,并且他们是相互独立的。最后才会执行内部的Load事件,因此我们可以把这些初始化操作放入用户控件的Page_Load即可。
去掉HyperLink1_Load。把代码放入用户控件的Page_Load中。
并且只应该在第一次请求的时候进行初始化操作。因此我们的代码变更为:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {//判断是否是首次请求
HyperLink1.Text = "百度";
HyperLink1.NavigateUrl = "http://www.baidu.com";
}
}
添加属性
我们又发现了一个问题,这样写,我们在应用页面里没办法直接控制这些元素,如我们创建的Panel和HyperLink。我们可以通过创建属性的方式给用户控件提供被外界方便使用的“通道”。
public partial class HyperLinkControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {//判断是否是首次请求
HyperLink1.Text = "百度";
HyperLink1.NavigateUrl = "http://www.baidu.com";
}
}
private string url;
public string Url
{
get { return url; }
set { url = value; }
}
private string text;
public string Text
{
get { return text; }
set { text = value; }
}
}
}
我们有发现虽然外界可以访问这两个属性了,这两个属性只是起到保存数据的作用,友情链接根本没有发生变化。
这时,我们有两个解决方案,第一种是更改属性的set访问器,用赋值的时候来直接对相应控件进行设置。
另一种就是在用户控件的Page_Load事件里来进行设置即可。因为页面的Page_Load要优先执行,也可以通过ASPNET标记属性来进行设置。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {//判断是否是首次请求
HyperLink1.Text = Text;
HyperLink1.NavigateUrl = Url;
}
}
调用页面代码
<uc1:HyperLinkControl runat="server" Text="新浪" Url="http://www.sina.com.cn" ID="HyperLinkControl" />
结果:
貌似我们完成了一个简单的用户控件,但是还有一些缺陷,就是不能同时设置多个友情链接信息,不能够设置图片链接信息等。
下面我们来用自定义对象的方式对其进行扩展。
首先我们需要创建一个自定义类HyperLinkItem,该类是为网页和用户控件通信而特别设计的。它定义每个链接所需的信息。
public class HyperLinkItem
{
public string Text { get; set; }
public string Url { get; set; }
public HyperLinkItem() {
}
public HyperLinkItem(string text, string url) {
Text = text;
Url = url;
}
}
定义好Item类之后,就需要定义用户控件页面了,在这里为了能够批量显示链接信息,这里将以前的HyperLink更换为Literal。
定义好这些后接下来就要考虑如何显示了。
在用户控件里编写一个集合属性用来保存多条的链接信息。
protected void Page_Load(object sender, EventArgs e)
{
}
private List<HyperLinkItem> hyperLinkItems;
public List<HyperLinkItem> HyperLinkItems
{
get { return hyperLinkItems; }
set {
hyperLinkItems = value;
foreach (var item in hyperLinkItems)
{
this.Literal1.Text += string.Format("<a href='{0}' style='margin-right:5px'>{1}</a>",item.Url,item.Text);
}
}
}
我们在集合赋值数据的时候通过遍历的方式把要输出的字符串放入Literal1中。
然后就可以直接使用了。
我们在引用的Page页里来初始化数据并显示。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<HyperLinkItem> list = new List<HyperLinkItem>() {
new HyperLinkItem{ Url="http://www.baidu.com", Text="百度"},
new HyperLinkItem{ Url="http://www.163.com", Text="网易"},
new HyperLinkItem{ Url="http://www.google.com", Text="谷歌"},
new HyperLinkItem{ Url="http://www.taobao.com", Text="淘宝"},
new HyperLinkItem{ Url="http://www.cnblogs.com", Text="<img src='http://static.cnblogs.com/images/adminlogo.gif' border='0px' />"}
};
HyperLinkControl.HyperLinkItems = list;
}
}
最终效果:
下篇,我们来看看如何加入自定义事件
转载于:https://www.cnblogs.com/feelboy/archive/2012/08/26/2657671.html
风影ASP.NET基础教学 7用户控件编程相关推荐
- 风影ASP.NET基础教学 6用户控件
在Web系统开发中,经常会有一些功能模块在很多的地方重复出现,例如新闻管理系统中的用户登陆/注册.推荐新闻.热点新闻和页面上的一些固定栏目等.为了提高代码的重用性,减少系统的开发与维护成本,一般会把这 ...
- 风影ASP.NET基础教学 5 验证控件(二) 扩展自己的验证控件
前文回顾 我们之前提过了5种官方验证控件的方式. 下面我们来讲解编程方式验证和扩展自己的验证控件 以编程的方式验证asp.net控件 默认情况下,在页面回发到服务器时,页面初始化之后(即视图ViewS ...
- 风影ASP.NET基础教学 4 验证控件
前言 无论什么应用软件系统,它最本质的功能和用途就是处理数据.这样,数据的安全性就成为了系统设计里面非常重要的话题,提交一些不安全的数据(如SQL注入.数据类型或者数据范围不合适等)常常会导致系统计算 ...
- ASP.NET 实践:使用用户控件实现 Web 部件的个性化
这个实践示范了如何创建依赖于 Web 部件个性化的 ASP.NET 用户控件,并在 Web 页面中提供用户特定的默认值. ASP.NET Web 部件控件集允许你建立拥有模块化布局的 Web 页面,并 ...
- 在asp.net中为Web用户控件添加属性和事件
在90年代初,Microsoft为Web程序员提供的 Active Server Pages(ASP)革命性地改变了Web的编程.它可以利用十分易用的模型在Web服务器上动态生成HTML,并且很容易的 ...
- ASP.NET重用代码技术 - 用户控件技术
作者: 苏红超 使用ASP.NET中的代码绑定技术来使得代码重用变得简单可行.我们发现,利用代码绑定技术我们可以容易的将我们的代码和内容分离开来,利用它可以建立可重用的代码,只是这种技术本身也存在着一 ...
- ASP.NET分页存储过程自定义用户控件
网上有很多分页存储过程,但是基本上都是提供一个单纯的存储过程,没有具体的怎样去实现.最近做一个项目用户的数数据相当大(一百万以上的数据),如果用.NET自带的分页基本上是跑不动了,不是提示超时就是死在 ...
- Asp.Net用户控件编程实例
新建一个Asp.Net空网站:加入一个Default页: 添加一个web用户控件: 解决方案结构如下: 用户控件页面添加一个Label: <%@ Control Language="C ...
- ASP.NET开发:在用户控件中添加属性
在WEB开发中,可重用的代码我们可以把它写成一个通用模块供需要的地方来引用.本文就是介绍在ASP.NET的web编程时,如何在用户控件中添加属性,实现这种方法:举例说明详解. 在WEB开发中经常有一些 ...
最新文章
- Ext学习-前后交互模式介绍
- iOS10 推送通知 UserNotifications
- NumPy 数学函数
- SQL注入的原理解说,挺好!
- Android Studio 项目断开SVN连接
- 文档基本结构标签的作用
- 留学面试 计算机专业话题,英语面试_美国留学计算机专业详解_沪江英语
- 无迹卡尔曼滤波器(UKF)
- android wifi是否可用,Android检测网络连接是否可用
- python下载url链接_使用Python从url地址下载所有pdf文件
- ServletResponse的getOutputStream()与getWriter()使用冲突
- jquery之hasClass
- 2.scrapy 的使用
- 3S基础知识:MapInfo应用MapX编程实现地图数据查询
- 利用动态数组生成魔方矩阵
- 提供2.4G单色、双色、RGB\RGBW\RGBCW调光LED灯方案
- python中的数学函数汇总
- SLAM_视觉SLAM面试题及答案汇总
- 常见搜索算法(二):二分查找
- 51单片机实战教程(34 线缆摇摆测试机设计)
热门文章
- 今日头条前端面试过程与面试题
- APISIX 极简入门(国产微服务网关)
- Cyprss串行铁电存储器64Kbit FM25CL64B-GTR
- ARM的合法立即数与非法立即数
- “阿里云之父”王坚:硅谷不应当成为我们的天花板 | 腾讯2017年Q3营收同比增61%
- 铷标准的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 知识普及篇——动手做foc无刷电机电子调速器
- 【数据库原理与SQL Server应用】Part13——数据库设计
- 智能语音电灯-----2---单片机 led灯模块 先用按钮 点亮一个 led灯泡
- RabbitMQ在特来电的深度应用