首页 > 语言 > 关键词 > 最新资讯 > 正文

ASP.NET立即上手教程(14)

2007-09-27 10:34 · 稿源:网页教学网

创作自定义服务器控件

本章的内容演示高级开发者如何书写ASP.NET页面中的服务器控件。通过书写自定义的服务器控件,可以封装定制的用户接口以及其他功能。本教程通过一系列逐渐展开的例子提供了创作自定义控件的入门知识。关于控件创作的更多信息,参阅.NET Framework SDK文档中“开发ASP.NET服务器控件”部分。

重要提示:本章表述的控件尽管可以在ASP.NET页面的运行时刻正常运行,但是在页面开发工具,如Microsoft Visual Studio.NET,设计时却有可能无法正常工作。为了在设计器中正常工作,自定义控件需要应用设计时刻属性----该属性在本章不进行表述。关于设计时刻属性的细节,参阅SDK文档中“组件的设计时刻属性”部分。

开发一个简单的自定义控件

开始创作自己的ASP.NET服务器控件其实很容易。要想建立一个自定义控件,你需要做的全部工作仅仅是定义一个从System.Web.UI.Control继承而来得类,并且覆盖它的Render方法。Render方法带有一个System.Web.UI.HtmlTextWriter类型的参数。控件需要发送到客户端的HTML代码作为字符串参数传递给HtmlTextWriter的Write方法。

定义简单的属性

属性类似于“聪明”的字段,它具有存取器方法。你可能从你的控件中expose属性而不是公共字段,因为属性允许数据隐藏,可以版本控制,并且可以被可视化设计工具所支持。属性具有get/set存取器方法,用来设置和取得属性值,并允许在必要的时候执行额外的程序逻辑。

下面的例子展示如何增加简单的属性,它对应私有数据类型,如整数、布尔和字符串。这个例子定义了三个属性:Message是字符串类型、MessageSize是枚举类型、Iterations是整数类型的。请注意设置简单属性和枚举属性的ASP.NET页面语法。

定义类属性

如果类A的属性类型是类B,那么B的属性被称为A的子属性。下面的例子定义了一个自定义服务器控件SimpleSubProperty,它有一个Format类型的属性。Format是一个具有两个私有属性的类:Color和Size ,他们依次成为了SimpleSubProperty的子属性

注意ASP.NET具有特定的语法来设定子属性。下面的代码显示了如何显式设置SimpleSubProperty的子属性Format.Color和Format.Size。“-”语法表示子属性。

<SimpleControlSamples:SimpleSubProperty Message="Hello There" Format-Color="red" Format-Size="3" runat=server/>

找回内部的内容

每个控件都有一个从System.Web.UI.Control继承的Controls属性。这是一个集合属性,表示控件的子控件。如果一个控件没有用ParseChildrenAttribute或者ParseChildrenAttribute(ChildrenAsProperties = false)标识,那么当控件在页面中声明的时候,ASP.NET页面框架就会应用下面的解析逻辑。如果解析器在控件的标签中遇到嵌套控件,它就会建立控件实例,并将其添加到控件的Controls属性。标签间的文字文本被添加为LiteralControl。任何其他嵌套元素产生一个解析错误。

下面的例子展示了一个自定义控件SimpleInnerContent,通过检查LiteralControl是否被添加到它的控件集合中,来决定是否将交付的文本增加到它的标签之间。如果是,它就取得LiteralControl的Text属性,然后将其添加到输出字符串。

重要提示:如果你的自定义控件从WebControl衍生而来,它将不会有上面例子中描述的解析逻辑,因为WebControl用ParseChildrenAttribute(ChildrenAsProperties = true)标记,它导致不同的解析逻辑。关于ParseChildrenAttribute的更多信息,请参阅.NET Framework SDK文档。

开发复合控件

你可以使用类的合成,通过组合现在有的控件来创作新的控件。复合控件类似于用户控件,也是使用ASP.NET语法来创建。用户控件和复合控件的主要区别是:用户控件是扩展名为.ascx的文本文件,而组合控件是编译过的,已汇编的方式使用。

开发组合控件的关键步骤是:

· 覆盖从Control继承的保护型方法CreateChildControls,建立子控件的实例,并将其添加到控件集合。

· 如果页面中的复合控件实例需要重复创建,需要引入System.Web.UI.INamingContainer接口。这是一个没有方法的标签接口。当他被控件引入的时候,ASP.NET将在这个控件下面建立一个新的名称空间。这就保证了子控件在控件的继承树中具有唯一的ID。

你不必覆盖Render方法,因为子控件提供了交付逻辑。你可以引申子控件合成的属性。

下面的例子定义了一个复合控件Composition1,它合并了System.Web.UI.LiteralControl和System.Web.UIWebControls.TextBox.Composition1,引申了一个整数类型的自定义属性Value,映射TextBox到的Text属性。

  • 相关推荐
  • 大家在看
  • 荣耀笔记本MagicBook Pro“用力过猛”!轻薄、大屏、性能全满足

    随着人们生活质量的逐步提高,像荣耀笔记本MagicBook Pro2020 这种可以满足用户各种需求的笔记本更受消费者欢迎。它不仅是拥有大屏的轻薄笔记本,还是性能强悍的实力型笔记本,且具备多种实用功能,这样的笔记本在市场上并不多见,被消费者称为:"用力过猛过!"下面一起来了解一下这款荣耀笔记本,感受一下属于它的魅力。荣耀笔记本MagicBook Pro2020 质量非常好,A/B/C三面都是高品质铝合金材质,经过阳极氧化工艺加工后,保持铝合

  • 中商互联集团完成中科企创信息技术研究院收购

    据悉,中科企创(北京)信息技术研究院2012年7月25日成立于北京,该研究院成立8年以来,专注电子商务诚信认证、搜索引擎大数据研究。 据企查查公示,此次收购,由中商互联集团董事会成员代持中科企创(北京)信息技术研究院100%股权。据知情人士了解,中商互联集团近期动作频繁是为了终端点商宝及采商通客户增效,此次收购完成,或许有助于中商互联集团布局国内大数据产业互联网商业效果营销领跑者愿景进一步加快实现。

  • 伴宝乐硬核上市,后疫情时代为有机行业加速赋能

    2020年的开局,新型冠状病毒这只“黑天鹅”扑面而来,消费者健康观念发生巨变,品牌生存发展遭遇全新洗牌的种种考验。在这样一个充满不确定性的后疫情时代里,如何洞察市场大势,把握新需求和新机遇,如何不断地调整自己,应对挑战,从而获得逆势飞跃增长?炫耀性需求减弱,新的消费需求出现受疫情影响,用户的心理状态和生活状态都发生了双重改变,在这一过程中,消费需求也发生了变化。中国消费者对物质的追求不再那么强烈,他们

  • 供应链称苹果iPhone 12 Pro未配备120Hz高刷新率屏幕

    ​苹果12最新消息,据Display Supply Chain Consultants 创始人 Ross Young 在推特发布的消息称,目前来自供应链内部的消息显示 iPhone 12 Pro 系列并不会采用 120Hz 刷新率的屏幕,2021 iPhone 才会有。

  • 蚂蚁庄园今日答案7.3 切蛋糕时怎么做可以使切口平整且不粘

    ​2020年7月3日到了,今天是工作日的最后一天,支付宝蚂蚁庄园小课堂的问题也更新了,今天的问题是“切蛋糕时,怎么做可以使切口平整且不粘?”这个问题其实很好回答,两个选项看着就知道选哪个了,下面就来为大家科普一下。

  • 新手小白必看的良心评测:爆款电动牙刷美看Mcomb M2开箱

    电动牙刷现在已经成为日常生活中必不可少的电子产品之一,清洁能力比普通牙刷要高出几倍,尤其是声波电动牙刷。这一两年来经常开箱评测各种电动牙刷,今天要开箱的是一款被媒体称为中高端轻奢级品牌中的第一潮牌的美看Mcomb ,正在热卖的M2电动牙刷。第一、外观篇任何一款产品,给我们的第一印象就是外观,包装好不好看,是否高大上也会直接影响我们对品牌的看法。美看Mcomb其实是一个非常有爱的国内知名品牌,多少恋人都不是朝夕?

  • Decoverf皇家帝孚:超能妈妈的N个帅气时刻!

    你眼中的家是一个地方妈妈眼中的家是有你在的时光女子本弱,为母则强每一位妈妈都活成了超人的模样儿女眼中的超人妈妈在我的心里妈妈就像超人般的存在在我的生活中扮演各种各样的角色年幼的我总是喜欢乱涂乱画家里的墙面显然成为我的天然大画板但是妈妈从未阻止过我让我可以释放天性,尽情涂鸦!▲Decoverf皇家帝孚绘巧黑板漆妈妈宛若一个梦想家为我插上隐形的翅膀给我充足的自由发挥空间不压制想象,培养我的创作力!▲Decoverf皇家

  • 马斯克卖掉洛杉矶四套房产 今年靠卖房套现近亿美元

    7月1日,马斯克以6250万美元的价格将其在美国洛杉矶的四套房产脱手,自五月起马斯克已累计出售6处房产。5 月 1 日,马斯克发推文称将出售几乎所有的有形资产,将不再拥有房子。5 月 3 日,马斯克在洛杉矶的两座豪宅分别以 3000 万美元和 950 万美元在房地产网站出售。

  • 巨人网络:参股子公司完成收购重庆赐比 间接持有Playtika公司部分股权

    【TechWeb】7月3日消息,巨人网络发布公告称,参股子公司巨堃网络于近日通过增资完成了对重庆赐比商务信息咨询有限公司的收购。截至本公告日,巨堃网络拥有重庆赐比100%的权益。重庆赐比持有 Alpha Frontier Limited(以下简称“Alpha”)9,672 股 A 类普通股(占 Alpha 总股本的 42.04%)。巨人网络通过收购重庆赐比,间接持有Alpha部分股权。Alpha 旗下的 Playtika 是一家以大数据分析及人工智能 为驱动的高科技互联网公司,目?

  • 封禁TikTok之后:印度出现100种山寨它的App

    印度通信和信息技术部 6 月 29 日宣布,出于“安全”考虑,封禁包括抖音海外版TikTok在内的 59 款中国App。22 岁的萨达姆·汗(Saddam Khan)听到这个消息的时候,正在新德里火车站当搬运工,他的头上正顶着两只客户的公文包,“我真想把包扔了然后哭一场。”萨达姆·汗说。

  • 特斯拉否认解雇未复工员工 已结束降薪政策

    特斯拉北京展厅凤凰网科技讯 北京时间7月3日消息,特斯拉公司在周四澄清称,公司并未解雇因担心其加州工厂在新冠肺炎疫情期间的安全问题而选择在家的员工。特斯拉在一篇博文中称,在其工厂获准复工后,公司已经好几周时间不再使用考勤制度,并且为员工提供了一个“不会过问的居家时间窗口”,公司的防护措施符合美国县、州以及联邦层面的指导方针。《华盛顿邮报》周三报道称,三名特斯拉员工因为选择在家不去加州工厂上班而被解雇?

  • 创号仅三月,多次上热搜,这个短视频媒体如何打造爆款?

    在过去几个月,从腾讯新闻繁星计划中诞生了一批优质内容创作者,我们邀请这批成长速度较快的新锐创作者分享自身对行业的理解,包括但不限于运营思考、趋势预测、热点解析等,帮助内容创作者理解当前行业发展,抓住不断变革中的行业机遇。

  • ​“破格”落户上海,李佳琦凭什么?

    以“特殊人才”之名,李佳琦获上海户口昨天李佳琦又上热搜了,上次是因为买房,这次是因为落户。

  • 黄峥、宿华、张一鸣:相逢在中场

    ​当我们跳到 2020 年岁末做年终财经大事盘点,少不了一句话:三个男人一台戏。1980 年出生的黄峥,今年刚好 40 岁。

  • 被指员工多年往啤酒中撒尿 百威回应网友:恶意诋毁、严重误导

    颇有名气的百威啤酒近日蒙遭负面,网上出现了关于“有员工多年来往里面尿尿”的传言。对此,百威啤酒官微7月2日晚在微博发表声明,回应称,这是对公司产品的恶意诋毁,严重误导消费

  • 老干妈上架大客户专属辣椒酱,只是促销并未他意

    近日腾讯起诉老干妈一事已经成为这两天互联网上一个热议的话题,作为当事人之一的老干妈在7月2日上架了“大客户专属的 1000 瓶辣椒酱”,该辣椒酱为套装组合出售,1000瓶售价为9999元。

  • 英特尔恢复对浪潮信息供货 浪潮称目前生产经营正常

    今日,浪潮信息在互动平台表示,公司目前生产经营正常,Intel已恢复对浪潮的供货。7月1日,有媒体报道称,浪潮信息被加入美国出口管治名单,英特尔产品出口至浪潮的产品暂停。受此影响,7月1日午后开盘,浪潮信息股价直线跳水,一度跌停。

  • 小鸡宝宝考考你今天答案是什么 夏季雨后青蛙还靠哪个器官来呼吸

    2020年7月3日,支付宝的蚂蚁庄园小课堂小鸡宝宝考考你的问题来了,今天小鸡宝宝的问题是“小鸡宝宝考考你,夏季雨后蛙声一片,除了肺之外,青蛙还靠哪个器官来呼吸?”这个很多人都不知道答案是什么,下面就来为大家详细的介绍一下。

  • 40天内就收回所有成本!豆豆是这么说爽文流这个大生意的

    ​我们对市场会有很多想象,认为高大上才是未来,但2018- 2019 年乃至现在市场讲述的故事都是下沉。在友盟+的数据中,逆势增长的版块无论从任何一个角度去看,都逃不开小说App这个细分区域。

  • 上汽集团拟出资约19亿港元:成为神州租车最大股东

    万没想到,神州租车再现新买家,上汽集团半路杀出。7月3日消息,昨日晚间,上汽集团发布公告称,公司全资子公司上汽香港与神州优车及其子公司 UCAR Limited、UCAR Service Limited、 UCAR Tec

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议