是否有可能在处理程序内部获取将要触发的控制事件列表Page_Load
?
例如,如果单击了一个按钮,我可以在button_click
调用事件处理程序之前弄清楚吗?
不幸的是,询问 __EVENTTARGET 值并不能解决问题。通常,该值将为空。回发处理根据事件目标值(如果有的话)测试控件状态值与表单(例如文本框)发布的值来确定是否应该引发诸如 TextChanged 之类的事件,从而决定要引发哪些事件.
除了将事件处理程序实际连接到您希望为其捕获事件的所有控件之外,我认为没有任何方法可以确定它。不过,基本上可以做框架所做的事情。您需要在创建控件和恢复视图状态之间但在处理发布的值之前执行此操作。您可以将当前控件值(来自视图状态)与发布的值进行比较,基本上确定将触发哪些事件。
你的目标是什么?也许有更好的解决方案。
您选择了一个非常棘手的问题……原因是事件会以多种方式触发。
1) __EVENTTARGET(如上所述) 2) 如果您的按钮名称是 MyButt,那么您将在查询字符串中看到“MyButt=”。3) 当每个控件(例如 TextBox)检查请求以查看其在 ViewState 中的值是否与发布的不同时,将触发“Text_Changed”。
但是,您可以使用#1 和#2 来检查几个地方。
以下包含单击时按钮的错位 id。
Page.Request.Form["__EVENTTARGET"]
这是一个我相信可以回答您的问题的示例。
另一种方法是在调试时设置一些断点。