Dee*_*ons 1 c# asp.net events user-controls delegates
如何实际将asp.net usercontrol [ascx文件]中的抽象事件暴露给容器webforms页面.这是我的情景,
我创建了一个webforms usercontrol一个ascx文件并将一个带有验证器的数据绑定复选框列表进行验证(我知道这可以完成webforms本身为什么用户控制你问,但这是一个场景)
现在我想将一个事件暴露给容器页面,该容器页面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);
}
Run Code Online (Sandbox Code Playgroud)
根据msdn文档,页面框架处理事件订阅和取消订阅.所以我需要做的就是在验证失败时调用事件.太棒了我很开心,但是,
所有其他公共财产都没有在属性窗口中显示该事件
凭啥我event invoker[InvokeOnValidating],event delegate[Validating]在智能感知列表中显示当我键入usercontrolid.与一起event[OnValidating].我只希望暴露事件.
我还可以允许页面订阅在usercontrol中创建的事件TextboxChanged吗?如果是这样,请给我代码.
注意:我希望看到更多的代码而不是冗长的解释
您正在混合概念,您不需要委托来注册事件,尝试此代码,我将解释更改并尝试在下面回答您的问题
public event EventHandler Validating;
private void OnValidating(EventArgs ea)
{
var e = Validating;
if (e != null)
e(this, ea);
}
Run Code Online (Sandbox Code Playgroud)
在具有控件使用的页面上,注意On,框架为所有事件添加此内容:
<uc:MyUserControl OnValidating="myhandlermethodinpage" />
Run Code Online (Sandbox Code Playgroud)
无法添加评论,但基本上如果你需要自定义事件args这样做:
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; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3427 次 |
| 最近记录: |