2011-02-28 37 views
0

我在ASP.NET中創建了一個用於顯示彈出消息框的自定義控件。在我的MessageBox類,我有這樣一個內容屬性作爲了Itemplate如下:如何處理自定義ITemplate控件中按鈕的Click事件?

[PersistenceMode(PersistenceMode.InnerProperty)] 
    [TemplateContainer(typeof(MessageBoxContent))] 
    [TemplateInstance(TemplateInstance.Single)] 
    public ITemplate Content { get; set; } 

我用我的自定義控制在我的網頁是這樣的:

<cc1:MessageBox ID="MessageBox1" runat="server"> 
    <Content> 
     <asp:Button Text="Save" runat="server" ID="B_Save" /> 
    </Content> 
</cc1:MessageBox> 

即使我的內容屬性的模板實例設置爲單身,我仍然無法訪問Button控件。

我想要做的就是處理按鈕的單擊事件。當我將一個事件處理程序分配給按鈕控件並運行該項目時,它會拋出NullReferenceException異常。 有沒有辦法解決這個問題?

+0

似乎沒有人會回答我的問題。 – 2011-03-02 05:33:57

回答

0

這取決於您何時調用模板實例化。

在容器的Load事件中,你應該這樣做,並且在調用ITemplate.InstantiateIn方法後,您將訪問模板注入控件。

如果您無權訪問該控件,應該是您正在查看錯誤的控件層次結構級別。也許你把它套在錯誤的地方?

你可以給我們一部分源代碼嗎?可以很好地看到你在哪裏實例化你的控件模板,以及後來的嘗試添加Click事件處理程序的地方。

+0

我在我的Control的Render方法中調用了Instantiate()方法。如果你有一個例子,請張貼:) – 2011-02-28 11:48:28

0

我在創建的自定義控件中遇到了類似的問題。

我想在Itemplate Template屬性中找到一個LinkBut​​ton,併爲它指定一個Click事件。

我被實例化的模板的OnInit的OnLoad分配click事件。

我發現LinkBut​​ton在OnLoad,沒問題。我還能夠添加Click事件,這一切似乎都很好,直到當我嘗試點擊LinkBut​​ton時,Click事件沒有被觸發。

對我來說,修復是讓我的自定義控件工具INamingContainer