c# - 将事件从 asp.net 用户控件公开到容器 Web 表单页面

标签 c# asp.net events user-controls delegates

实际上如何将来自 asp.net usercontrol[ascx 文件] 的抽象事件公开到容器 webforms 页面。这是我的场景,

  1. 我创建了一个 webforms usercontrol 一个 ascx 文件,并放置了一个带有验证器的数据绑定(bind)复选框列表来验证它(我知道这可以通过 webforms 本身完成,为什么你问一个 usercontrol,但这是一个场景)

  2. 现在我想向名为 OnValidating 的容器页面公开一个事件这将产生验证结果

事件签名如下:

public delegate void Validating(object source,EventArgs e);

public event Validating OnValidating;

public void InvokeOnValidating(EventArgs e)
        {
            Validating handler = OnValidating;
            if (handler != null) handler(this, e);
        }

根据 msdn 文档,页面框架处理事件订阅和取消订阅。所以我需要做的就是在验证失败时调用事件。太好了,我很高兴,但是,

  1. 当所有其他公共(public)属性显示时,我无法在属性窗口中显示该事件

  2. 为什么是我的event invoker[InvokeOnValidating] , event delegate[Validating]当我输入 usercontrolid. 时显示在智能感知列表中连同 event[OnValidating] .我只想公开事件。

  3. 我还可以允许页面订阅在用户控件内创建的事件 TextboxChanged 吗?如果是这样,请给我代码。

注意:我希望看到更多的代码而不是冗长的解释

最佳答案

你在混合概念,你不需要委托(delegate)来注册事件,试试这段代码,我会在下面解释这些变化并尝试回答你的问题

    public event EventHandler Validating;
    private void OnValidating(EventArgs ea)
    {
        var e = Validating;
        if (e != null)
            e(this, ea);
    }

在使用控件的页面上,注意On,框架为所有事件添加了这个:

<uc:MyUserControl OnValidating="myhandlermethodinpage" />
  1. VS 对此不是 100% 准确,有时控件的属性不会显示!智能更可靠
  2. 因为他们没有设置为私有(private),所以只有事件应该是公开的。
  3. 不确定是否可行,您需要捕获控件中文本框的事件并使其引发自己的新事件。

无法添加评论,但基本上如果您需要自定义事件参数,请这样做:

    public event EventHandler<CustomEventArgs> Validating;
private void OnValidating(CustomEventArgs ea)
{
    var e = Validating;
    if (e != null)
        e(this, ea);
}
public class CustomEventArgs:EventArgs{
    public int MyProperty { get; set; }
}

关于c# - 将事件从 asp.net 用户控件公开到容器 Web 表单页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7346324/

相关文章:

c# - 如何在 ASP.NET 中实现支付网关

c# - 通过 NuGet 包更改 Global.asax?

asp.net - 我应该如何使用 ASP.Net MVC3 中的值自动填充 Html.EditorFor?

c# - 使用事件 'source' 的嵌套对象指针是否正确?

c# - 新建具有非常大初始容量的 List<T> 并填充它与简单地填充 LinkedList<T> 的性能

c# - 将默认数据库设置为用户 SQL Server (Azure)

c# - 将值从 CodeBehind 传递到 Angularjs 变量

c# - 设置属性时换出事件的最优雅方法是什么?

c++ - 通用调度程序类

c# - 在循环中动态更改 C# 变量名称