這些問題提的都蠻有意思的 不敢班門弄斧,只是就其中幾個我知道的問題 發表一下自己的看法
*問題4. 談談 AutoEventWireup "uestc95:AutoEventWireup屬性是用來控制是否允許page framework自動調用 Page_Init和Page_Load方法的,默認情況下是true."
我的說明:在Page這個directive里vs會自動地幫你寫上AutoEventWireup="false", 去掉它,系統默認為true,它倒底是個什么東東呢,uestc95的回答是完全正確的
我們可以做一個實驗,把它設為true,然后再在Page_Load里添上一行代碼 Response.Write("I Love you,BABE!"); 然后執行,哈哈,我愛了你兩次。
我們改一點東西,把在InitializeComponent()里的那句 this.Load += new System.EventHandler(this.Page_Load);注釋了 再執行,哈哈,肉麻的話說一遍就可以了嘛。
答案到這里就很清楚了,有了AutoEventWireup="true",我們就沒有必要在為Page的事件 顯式的綁定處理方法了,系統會自動的執行Page_Init和Page_Load
*問題X:擴展問題:如何動態地,用程序(programmatically)引用一個 user control? 有什么要注意的? 眾所周知user control可以通過在HTML代碼里添加標記的形式加入到頁面中 它也可以在程序里動態的載入 方法很簡單,先聲明一個myControl protected System.Web.UI.Control myControl;
然后這樣 myControl=LoadControl("XXXXXXX.ascx");
再把它添加到一個繼承于System.Web.UI.Control的WebControl里就可以了,比如Panel myPanel.Controls.Add(myControl);
我想操作我的User Control怎么辦 ((你的User Control的類名)myControl).你想執行的方法;
*問題14: 如果你通過繼承 System.Web.UI.Control 寫了個 Custom Control, 如何加上對 client-side script 的支持? "uestc95:比如在一個<asp:button>中想要增加一個客戶端腳本事件: Button1.Attributes.Add("onclick","alert(‘客戶端的javascritp腳本’)");"
剛開始我以為是為User Control添加client-side script 的支持,仔細一看,我看錯了:-( uestc95的回答完全正確,的確值得我們崇拜他一下。
不過問題有一個地方寫得不太對,應該是: "如果你通過繼承 System.Web.UI.WebControls.WebControl 寫了個 Custom Control" 因為只有WebControl才有這個WebControl.Attributes Property喲!
另外再順帶一下,如果你想在你的User Control里實現類似DataGrid的 Client-side JavaScript for Custom Postback務必要讓你的User Control實現 System.Web.UI.IPostBackEventHandler這個接口,然后用Page.GetPostBackEventReference傳送 事件參數,再用RaisePostBackEvent來拿到參數處理提交。 這個在quickstart里有完整的例子,有興趣的朋友可以去看看
*問題16: 自己寫個 control 如何支持 template? 能否在 control 中寫代碼讀取 template 中將要放入的內容(比如控件)的值?
這個問題很奇怪,高手們誰都沒給出答案(因為太Easy了:-),讓我們這些潛水員都急壞了 我就試著答一下吧
User Control是可以支持Template的,如果它支持,我們可以給它一個外號:Templated control 首先,Templated control 應該實現INamingContainer,防止放在Template里的控件和外面的重名 請注意,我用了應該這個詞,而不是必須
其次,Templated control必須至少有一個這樣的屬性 屬性類型是ITemplate,且屬性讀寫方法前必須有[TemplateContainer(typeof(模板里放入的東東))] 程序是這樣的:
private ITemplatemyTemplate = null;
[TemplateContainer(typeof(模板里放入的東東))] public ITemplate MyTemplate { get { return myTemplate; } set { myTemplate = value; } }
然后我們要override一下CreateChildControls方法,象這樣:
protected override void CreateChildControls() {
if (myTemplate != null) { 模板里放入的東東 i = new 模板里放入的東東; myTemplate.InstantiateIn(i); this.Controls.Add(i); } }
寫到這里我發現了一個問題,就是這個"模板里放入的東東"是我new出來的 而不是分析aspx代碼讀到的,這帶來的副作用就是我事先就確定了模板里的內容 這就不靈活了,可能也和這個問題的本意發生了矛盾。 如果有人知道,希望出來解一下惑!!!!!
第二個問題嘛,我想用FindControl這個方法應該可以搞定吧.
|