将事件从asp.net用户控件公开到容器Web表单页面
如何实际将asp.net usercontrol [ascx文件]中的抽象事件暴露给容器webforms页面。 这是我的情景,
-
我创建了一个webforms usercontrol一个ascx文件,并将一个带有validation器的数据绑定复选框列表进行validation(我知道这可以完成webforms本身为什么用户控制你问,但这是一个场景)
-
现在我想将一个事件暴露给名为
OnValidating
的容器页面,该页面将产生validation结果
该活动的签名如下:
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文档,页面框架处理事件订阅和取消订阅。 所以我需要做的就是在validation失败时调用事件。 我很高兴,但是,
-
所有其他公共财产都没有在属性窗口中显示该事件
-
当我键入
usercontrolid.
时,为什么地狱是我的event invoker[InvokeOnValidating]
,event delegate[Validating]
在intellisense列表中显示usercontrolid.
以及event[OnValidating]
。 我只希望暴露事件。 -
我还可以允许页面订阅在usercontrol中创建的事件TextboxChanged吗? 如果是这样,请给我代码。
注意:我希望看到更多的代码而不是冗长的解释
您正在混合概念,您不需要委托来注册事件,尝试此代码,我将解释更改并尝试在下面回答您的问题
public event EventHandler Validating; private void OnValidating(EventArgs ea) { var e = Validating; if (e != null) e(this, ea); }
在具有控件使用的页面上,注意On ,框架为所有事件添加此内容:
- VS不是100%准确的,有时控件的属性不会出现! Intelissence更可靠
- 因为它们没有被设置为私有,所以只有事件应该是公开的。
- 不确定是否可行,您需要捕获控件中文本框的事件并使其引发自己的新事件。
无法添加评论,但基本上如果你需要自定义事件args这样做:
public event EventHandler Validating; private void OnValidating(CustomEventArgs ea) { var e = Validating; if (e != null) e(this, ea); } public class CustomEventArgs:EventArgs{ public int MyProperty { get; set; } }
- 从会话到成员文件夹的身份validation
- 在web.config中的appSettings中使用“&”
- 如何在asp.net中实现“Access-Control-Allow-Origin”标头
- 无法加载类型’AjaxControlToolkit.Sanitizer.AntiXssSanitizerProvider’。
- HTTP代码405(方法不允许),当我在ASP.NET WebAPI CORS中发送POST数据时
- 从JavaScript调用函数背后的代码(不是AJAX!)
- 从来自NSUrlRequest的httpcontext获取变量
- 在ListView控件中查找控件
- Asp.net将参数添加到url字符串