問題:在ASP.NET的Callback發生時,可以同時處理Postback機制的事件,但是Postback的頁面會刷掉Callback的結果,造成畫面閃動的現象。
但是我還是想要由Ccallback執行Poastback的事件。
目標:可以應用在ASP.NET的Web From上,由一個控制項來驅動另一個控制項的事件。注意,在同一個類別中不適用(用一般的方法就好啦)。
方法:1. 註冊一個事件,可以使用
protected void Button1_Click(object sender, EventArgs e){}(.aspx 的 AutoEventWireup="true")
或是
protected void Page_Load(object sender, EventArgs e){Button1.Click +=new EventHandler(Button1_Click);}
2. 找到畫面上的目標控制項,就是要驅動事件的控制項。例如要驅動Button的Click事件
Button btn = this.Page.FindControl("button1") as Button;
3. 使用反射方法找到Click事件的委託(Delegate),再執行這個事件。
RaiseEvent(btn, "Click", new EventArgs());private void RaiseEvent(object sender, string eventName, EventArgs args){PropertyInfo property = sender.GetType().GetProperty("Events",BindingFlags.Instance |BindingFlags.NonPublic);EventHandlerList ehList = (EventHandlerList)property.GetValue(sender, null);FieldInfo fieldInfo = sender.GetType().GetField("Event" + eventName,BindingFlags.Static |BindingFlags.NonPublic);Delegate d = ehList[fieldInfo.GetValue(null)];object[] objects = new object[] { sender, new EventArgs() };d.DynamicInvoke(objects);}
參考文件:
沒有留言:
張貼留言