我可以找出哪些控件事件将在ASP回发中触发?
问题描述:
在Page_Load
处理程序中,是否有可能获得将要触发的控制事件列表?我可以找出哪些控件事件将在ASP回发中触发?
例如,如果一个按钮被点击了,我可以在调用button_click
事件处理程序之前解决这个问题吗?
答
你已经选择了一个非常棘手的问题......其原因在于有几种方法会引发事件。 1)__EVENTTARGET(如上所述) 2)如果你的按钮名称是MyButt,那么你会在查询字符串中看到“MyButt =”。 3)当每个控件(例如TextBox)检查请求以查看它在ViewState中的值是否与发布时不同时,将激发“Text_Changed”。
但是,您可以使用#1和#2来检查几个位置。
答
以下内容包含点击时按钮的损坏标识。
Page.Request.Form["__EVENTTARGET"]
答
不幸的是,询问__EVENTTARGET值并不能解决问题。通常,这个值将是空的。回发处理根据不仅仅事件目标值(如果有的话)根据表单发布的值(例如用于文本框)测试控制状态值来确定是否应该提高像TextChanged这样的事件而做出关于要引发什么事件的一些决定。
除了实际将事件处理程序挂接到您希望捕获事件的所有控件之外,我不认为有任何方法可以确定它。尽管基本上可以做到框架的功能。您需要在控件创建和视图状态恢复之间,但在处理发布的值之前执行此操作。您可以将当前控制值(来自视图状态)与发布的值进行比较,从本质上确定哪些事件会触发。
你的目标是什么?也许有更好的解决方案。