KW問題之我見

來源:互聯網
上載者:User
問題 這些問題提的都蠻有意思的
不敢班門弄斧,只是就其中幾個我知道的問題
發表一下自己的看法

*問題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 ITemplate  myTemplate = 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這個方法應該可以搞定吧.



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。