下面我们使用“网站友情链接”的主要功能就是管理网站的各种友情链接地址,使这些友情链接能够显示在网站各个需要的地方,一般显示在网站的底部。为了实现链接显示,首先需要在项目中创建一个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用户控件编程相关推荐

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

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

  2. 风影ASP.NET基础教学 5 验证控件(二) 扩展自己的验证控件

    前文回顾 我们之前提过了5种官方验证控件的方式. 下面我们来讲解编程方式验证和扩展自己的验证控件 以编程的方式验证asp.net控件 默认情况下,在页面回发到服务器时,页面初始化之后(即视图ViewS ...

  3. 风影ASP.NET基础教学 4 验证控件

    前言 无论什么应用软件系统,它最本质的功能和用途就是处理数据.这样,数据的安全性就成为了系统设计里面非常重要的话题,提交一些不安全的数据(如SQL注入.数据类型或者数据范围不合适等)常常会导致系统计算 ...

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

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

  5. 在asp.net中为Web用户控件添加属性和事件

    在90年代初,Microsoft为Web程序员提供的 Active Server Pages(ASP)革命性地改变了Web的编程.它可以利用十分易用的模型在Web服务器上动态生成HTML,并且很容易的 ...

  6. ASP.NET重用代码技术 - 用户控件技术

    作者: 苏红超 使用ASP.NET中的代码绑定技术来使得代码重用变得简单可行.我们发现,利用代码绑定技术我们可以容易的将我们的代码和内容分离开来,利用它可以建立可重用的代码,只是这种技术本身也存在着一 ...

  7. ASP.NET分页存储过程自定义用户控件

    网上有很多分页存储过程,但是基本上都是提供一个单纯的存储过程,没有具体的怎样去实现.最近做一个项目用户的数数据相当大(一百万以上的数据),如果用.NET自带的分页基本上是跑不动了,不是提示超时就是死在 ...

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

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

  9. ASP.NET开发:在用户控件中添加属性

    在WEB开发中,可重用的代码我们可以把它写成一个通用模块供需要的地方来引用.本文就是介绍在ASP.NET的web编程时,如何在用户控件中添加属性,实现这种方法:举例说明详解. 在WEB开发中经常有一些 ...

最新文章

  1. Ext学习-前后交互模式介绍
  2. iOS10 推送通知 UserNotifications
  3. NumPy 数学函数
  4. SQL注入的原理解说,挺好!
  5. Android Studio 项目断开SVN连接
  6. 文档基本结构标签的作用
  7. 留学面试 计算机专业话题,英语面试_美国留学计算机专业详解_沪江英语
  8. 无迹卡尔曼滤波器(UKF)
  9. android wifi是否可用,Android检测网络连接是否可用
  10. python下载url链接_使用Python从url地址下载所有pdf文件
  11. ServletResponse的getOutputStream()与getWriter()使用冲突
  12. jquery之hasClass
  13. 2.scrapy 的使用
  14. 3S基础知识:MapInfo应用MapX编程实现地图数据查询
  15. 利用动态数组生成魔方矩阵
  16. 提供2.4G单色、双色、RGB\RGBW\RGBCW调光LED灯方案
  17. python中的数学函数汇总
  18. SLAM_视觉SLAM面试题及答案汇总
  19. 常见搜索算法(二):二分查找
  20. 51单片机实战教程(34 线缆摇摆测试机设计)

热门文章

  1. 今日头条前端面试过程与面试题
  2. APISIX 极简入门(国产微服务网关)
  3. Cyprss串行铁电存储器64Kbit FM25CL64B-GTR
  4. ARM的合法立即数与非法立即数
  5. “阿里云之父”王坚:硅谷不应当成为我们的天花板 | 腾讯2017年Q3营收同比增61%
  6. 铷标准的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  7. 知识普及篇——动手做foc无刷电机电子调速器
  8. 【数据库原理与SQL Server应用】Part13——数据库设计
  9. 智能语音电灯-----2---单片机 led灯模块 先用按钮 点亮一个 led灯泡
  10. RabbitMQ在特来电的深度应用