1. 程式人生 > >ASP.NET頁面中動態增加的控制元件、新增事件

ASP.NET頁面中動態增加的控制元件、新增事件

/--------------------------利用計數器實現動態button的累加---------------------------------/

     在ASP.NET中動態建立一個控制元件總是不那麼順利,特別是當對頁面的Life Cycle不是那麼瞭然的情況下!這裡簡單描述一下要求,然後提供一個解決方案,大家看看有沒有更好的Idea,如果有的話就是我的大幸了,呵呵!

  要求:頁面上有一個Add按鈕,每點選一次該按鈕,頁面上動態建立一個WebPartZone!

  提醒:WebPartZone只能在OnInit或之前才能建立,否則報異常!

  大家都知道,按鈕的點選事件是在RaisePostbackEvent時觸發的,這意味著點選事件在OnLoad階段之後才執行,遠遠落後於 OnInit階段,而且ViewState在OnLoad時才準備好,OnInit以及之前的階段根本就不能使用ViewState!如果試圖在按鈕點選事件裡面建立WebPartZone等控制元件,唯一的後果就是頁面出錯;而如果在OnInit裡面建立控制元件,由於ViewState沒有準備好,那麼有些資料比如當前需要建立的個數(存在ViewState裡面)就無法獲得!

  目前對這個問題我還沒有找到什麼好的解決方案,經過實驗,勉強得出一個不怎麼優雅的方案,就是利用HiddenField儲存資料,然後直接使用Request.Form["XXX"]在OnInit階段取得資料;而判斷是否點選按鈕也是通過Request.Form是否存在對應資料來判斷的!廢話不多說了,大家看看程式碼吧!

==========================動態新增事件===================================

實現的功能是在網頁上的Panel中動態新增一個Button,併為這個Button寫一個單擊事件。

動態新增控制元件的事件,語句:

具體的程式碼請看下面:

需要特別注意的是:

新增控制元件和給控制元件加事件時絕對不能放到 if(!IsPostback){}裡面,那樣的話,點選一次後控制元件會消失,而且事件也不

會執行。

-----------------------------------------asp.net為控制元件動態新增事件----------------------------------------------------

實現的功能是在網頁上的Panel中動態新增一個Button,併為這個Button寫一個單擊事件。

動態新增控制元件的事件,語句:

具體的程式碼請看下面:

需要特別注意的是:

新增控制元件和給控制元件加事件時絕對不能放到 if(!IsPostback){}裡面,那樣的話,點選一次後控制元件會消失,而且事件也不

會執行。

-----------------------------asp.net 中伺服器端控制元件動態新增事件和刪除事------------------------------------------

PlaceHolder :控制元件容器,本身不顯示,主要用來放伺服器控制元件的,只顯示其子元素(他裡面的控制元件)

伺服器控制元件動態新增和刪除

 <一>PlaceHolder  中動態新增伺服器端控制元件

新增控制元件的一般方法:

宣告一個新控制元件 如 label lb =new label()

設定控制元件屬性   如:lb.text="text"

新增控制元件到 PlaceHolder 中 如: PlaceHolder1.controls.add(lb)

可以用 ViewState[AddedControl]=null 判斷是不是第一次執行

動態新增控制元件,如果需要資料繫結,要先新增控制元件,然後再資料繫結,提交後(postback) 就不需要重新綁定了

new 一下就可以了,如:

<二>panel中動態新增伺服器端控制元件

在一個panel 中新增datagrid 並且繫結資料

<三> 給動態新增的控制元件新增事件:

如:給button 新增事件

這樣二個按鈕都對應一個函式,執行同一個事件

如果想讓他們執行不同事件,

可以這樣寫:

<四>:在table中新增行和伺服器端控制元件

在table中新增一行二列  table要轉化伺服器端控制元件

程式碼如下:

取得textbox中資料方法:

((TextBox)(TABLE1.Rows[m].FindControl("t" + m))).Text  第m行 id 為"t"+m的控制元件的值

新增html 控制元件,可以用 response.write("")

為伺服器端控制元件新增客戶端事件方法;

如:buttton.Attributes["onclick"] = "javascript:alert('shijain')";