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

如何在 UserControl (.ascx) 中调用 ASP.NET WebMethod

ASP.Net MVC UserControls 中处理 CSS 的策略