動態加載用戶控件的組件。3)
發表時間:2023-08-20 來源:明輝站整理相關軟件相關文章人氣:
[摘要]上一篇文章寫到動態加載用戶控件的簡單應用 頁面是用來瀏覽信息的!但是更重要的是和用戶交互,根據不同的需求提供不同的內容服務,這是一種服務或是一種更貼近用戶的人性化。(又在胡言亂語了!^_^)動...
上一篇文章寫到動態加載用戶控件的簡單應用
頁面是用來瀏覽信息的!但是更重要的是和用戶交互,根據不同的需求提供不同的內容服務,這是一種服務或是一種更貼近用戶的人性化。(又在胡言亂語了!^_^)
動態加載葉面,根據不同的用戶權限加載不懂的內容服務。根據用戶的相應加載相應的內容服務。
還有另外一個應用就是做到頁面與代碼的分離。在vs2003里,一般ascx或aspx文件,在剛建立的時候都直接跟一個cs文件關聯。那么我們在寫程序的時候就不能分開來做。作葉面和寫后臺代碼的不能分開。為了能夠做到作業面與作后臺代碼的能完全分開來,我們可以把后臺的所有代碼當作一個組件來做就可以了!這樣一個不用跟cs文件關聯的aspx葉面文件直接引用一個組件就可以了!那么組件可以加載不同的ascx文件最后組成一個完整的葉面。就這樣一個項目的開發就像個機車制造廠一樣組裝不同的零件就有輛車出來了。軟件也可以拿來組裝,零件我們也可以訂制,最后整體就可以出來了。ǔ3?磩e人的文章的時候怎么就覺得廢話那么多,原來發現我廢話也不少!^_^)
好!讓我們step by step ,就從不需要關聯cs文件的aspx葉面開始吧。ㄔ趘s2005里,我新建aspx葉面的時候就直接沒有cs文件關聯。但是直接有個不完整類型隱藏起來了。怎么用基類就成為問題了!隱藏部分應該是繼承了Page了!那么根據單繼承的原則我們是不能在繼承別的類型的了。這個問題有待研究。)
根據aspx葉面運行原理。葉面要跟服務端交互必須通過一個run at server的form標簽才能行得通。因此我不要先來寫個form組件,那么form就應該是個容器的形勢來承載葉面所有要與服務端交互的元素,(容器太重要了,namespace也可以看作容器,只不過是不能放東西而已,是虛擬的容器)
1、做form容器組建:繼承繼承他就行了,注意一點就是唯一ID的問題。自己繼承的可能該改變了ID,那么回傳的時候就找不到了啊。切記!當然render葉面的時候是通過遍歷所有form容器內所有的組件來一個個render出來。所以要改UniqueID。
示例一下:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace Region.Controls {
public class MyForm : System.Web.UI.HtmlControls.HtmlForm {
public override string UniqueID {
get {
if (this.NoNameContainer && this.NamingContainer != this.Page ) {
return base.UniqueID.Substring(base.UniqueID.LastIndexOf(":")+1);
} else {
return base.UniqueID;
}
}
}
protected override void RenderAttributes(HtmlTextWriter writer) {
this. NoNameContainer = true;
base.RenderAttributes (writer);
this. NoNameContainer = false;
}
protected override void RenderChildren(HtmlTextWriter writer) {
this. NoNameContainer = true;
base.RenderChildren (writer);
this. NoNameContainer = false;
}
private Boolean NoNameContainer = false;
}
}