ASP.NET真是博大精深,最近遇到一個UserControl的小問題,
逼得我不得不在Page_Load就取到觸發事件的元件,
其實很簡單,只要取Request.Params["__EVENTTARGET"]就好。
ASP.NET在PostBack時,會把觸發事件的該元件ClientID塞到__EVENTTARGET參數裡,
所以我們就可以在後端透過Request.Params["__EVENTTARGET"],知道是哪個元件觸發事件,
範例程式如下:
1 | protected void Page_Load( object sender, EventArgs e) |
2 | { |
3 | if ( this .IsPostBack) |
4 | { |
5 | var ctlName = this .Request.Params[ "__EVENTTARGET" ]; |
6 |
7 | Response.Write(ctlName); |
8 | } |
9 | } |
有一點要注意的是,Button元件要加上UseSubmitBehavior="false"屬性,才能取的到資料,像:
<asp:Button ID="Button1" runat="server" Text="Button" UseSubmitBehavior="false"/>
以上,終於解決我的問題,小小心得是,UserControl最好是在Page_Load就新增好,
最好不要在Click Event事件裡再去動態新增或刪除。