ASP.NET UserControl 和 DefaultEvent
Posted
技术标签:
【中文标题】ASP.NET UserControl 和 DefaultEvent【英文标题】:ASP.NET UserControl's and DefaultEvent 【发布时间】:2008-08-14 16:14:36 【问题描述】:大纲
好的,我已经用谷歌搜索了这个,并且已经期待一个大胖子 不! 但我想我应该问一下,因为我知道有时人们可能会潜伏着奇怪的小知识宝石头^_^
我正在学习一本书中的一些练习,这个特定的练习是用户控制。我拼凑了一个控件,并希望为其设置 DefaultEvent(已为以前的控件完成此操作),因此当我双击它时,创建的默认事件就是我指定的任何事件。
注意:这是一个标准的用户控件 (.ascx),不是自定义呈现的控件。
当前代码
这是类和事件定义:
[System.ComponentModel.DefaultEvent("OKClicked")]
public partial class AddressBox : System.Web.UI.UserControl
public event EventHandler OKClicked;
当前结果
现在,当我在 ASPX 页面上双击该控件时,将创建以下内容:
protected void AddressBox1_Load(object sender, EventArgs e)
不完全是我所期待的!所以,我的问题:
是否可以为 UserControl 定义 DefaultEvent?是黑客吗?如果 [不] 支持,有什么原因吗?
旁注:我们如何在代码中添加下划线?我似乎无法放入和转义 char?
【问题讨论】:
【参考方案1】:这是一个可能的答案,无需测试(就像马丁所做的那样)。
在反射器中,您将看到 DefaultEventAttribute 允许自身被继承。 在反射器中,您会看到 UserControl 类将其默认事件设置为 Load 事件。
所以可能的原因是,即使您使用默认事件 OKClick 来装饰您的用户控件,VS 可能仍然认为默认事件是 load,因为它是从默认事件是 Load 的 UserControl 继承的。
只是对可能发生的事情的高度猜测。
【讨论】:
【参考方案2】:好的,我检查了这个,继承自 WebControl 而不是 UserControl.. 一切正常。
看起来Darren Kopp 为这个夺冠了!感谢您的意见!
【讨论】:
以上是关于ASP.NET UserControl 和 DefaultEvent的主要内容,如果未能解决你的问题,请参考以下文章
在 asp.net 中,如何从 usercontrol 获取自定义 webcontrol 的引用?
如何为 ASP.net UserControl 指定命名空间?
[ASP.NET]UserControl透过属性,动态加入RequiredFieldValidator
将 Asp.Net UserControl 用作 SharePoint WebPart