今天在msn上有人跟我說用asp.net做網站不想用控制項了,我很奇怪。繼續探討下去發現原來他要解決的事情是前端頁面的
控制項數量是在運行時才能決定的,而他一直認為那些控制項只能拖到頁面上去。我想了想,覺得還是有必要把如何在前端頁面上動
態產生控制項的方法寫一下,大牛們可以走了,這個就是給不知道的兄弟們大概的說一下。
在前端代碼中,可能我們看到只是像div ,span 這樣的標籤形成的布局層次。實際上,在後台,.net也給我們做好了控制層
次。這樣說比較抽象,下面來看一個小例子說明吧:
<div id="div1" runat="server">
<div id="subdiv1">
......
</div>
<div id="subdiv2">
.....
</div>
<div>
在上面的代碼中,我們看到的是三個div形成的一個布局層次關係,div1包含兩個子div,看起來只能是固定如此的布局。實際
上在後台,.net會為div1做一個控制容器,在這個容器裡面把兩個子div加入進去,我們可以在後台找到容器裡面找到他們並且進行
處理。這個控制容器也有分層的概念,div1的控制容器包含subdiv1,subdiv2,兩個子div也有自己的控制容器。對於所有的區塊層級元素,
都會屬於自己的控制容器(關於區塊層級元素和行內級元素的概念,可以自己上網上找找,屬於html中的概念).這個控制容器,我們在後
台可以通過 this.Controls取到。
現在我們來做一個例子,來示意一個怎樣動態從資料庫中讀取資料產生一個導覽列,這個導覽列我用無序列表來實現(如何變
成導覽列自己參考html的內容)。首先來看前端代碼:
<div>
<ul id="ul" runat="server">
</ul>
</div>
可以看到前端的代碼非常簡單,只是加了一個無序列表的標籤<ul>,但是必須聲明這個列表運行在伺服器端的,否則.net不會維護
它的控制層次,我們也沒有辦法在後台對他進行控制,下面來看後台代碼怎樣動態添加列表元素:
DataTable t = new DataTable();
da.Fill(t);
foreach (DataRow row in t.Rows)
{
Label label = new Label();
label.Text = row["room_type"].ToString();
ul.Controls.Add(new LiteralControl("<li>"));
ul.Controls.Add(label);
ul.Controls.Add(new LiteralControl("</li>"));
}
看一下背景代碼也很簡單,首先從資料庫裡面提取出需要作為導覽列內容的表。對於表中的每一個元素,我們建立一個靜態
文字框,將需要顯示到導覽列中的內容寫入到靜態文字框中,然後調用無序列表控制容器的增加控制元素方法,就可以將清單項目添加
到無序列表中了。對於在其他的區塊層級元素中動態添加控制項方法,完全可以參照上面的來做。
有問題可以給我發郵件或者msn;zhaotiantang520@live.cn