2012-11-23 40 views
0

我嘗試使用.ascx文件的自定義控件加載ASP頁面中的多個控件,單擊按鈕事件。如何從單個.ascx文件加載ASP.net頁面中的多個用戶控件

這裏是我的.ascx文件:

<%@ Control Language="VB" ClassName="CHelloWorld" %> 
<script runat="server"> 
</script> 

<asp:Panel ID="panel" runat="server"> 
    hello world! 
</asp:Panel> 

現在我創建一個按鈕.aspx文件,並在其中我添加控件每次使用點擊按鈕面板:

<asp:Panel runat="server" id="panelcontrols"> 
</asp:Panel> 
<asp:Button id="myButton" OnClick="OnClickButton" Text="Add" /> 

這裏是click事件我.vb文件:

Sub OnClickButton(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim myControl As Control 
    myControl = LoadControl("myfile.ascx") 
    panelcontrols.Controls.Add(myControl ) 
End Sub 

使用這種實現,當我點擊第一次:我看到「Hello World!」在我的頁面中,但是當我第二次點擊時,第三次......沒有變化發生!

是因爲我只能從.ascx加載一個控件嗎?

如何從單個.ascx文件創建多個控件?

謝謝。

[編輯]

OK,我現在用的WiewState記住已經創建控件。謝謝。

但是我有一個問題:

我.aspx文件使用代碼在.vb文件與這條線在@Page指令(其中,我已經定義OnClickButton):SRC =「[路徑] /myscript.vb 。

但在這個.vb文件,我不知道如何使用CHelloWorld控制類型,修改控件屬性

如果我用這個代碼,它不工作:

Sub OnClickButton(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim myControl As CHelloWorld 
    myControl = LoadControl("myfile.ascx") 
    panelcontrols.Controls.Add(myControl ) 
End Sub 

它沒有說「CHelloWorld」未定義!

我該怎麼辦?

+0

你知道viewstate是打開還是關閉? – rhughes

+0

我使用ViewState編輯過文章,感謝您的回答。 – TheFrancisOne

回答

1

不,這是因爲您正在動態添加控件。在每個頁面加載時,添加的控件將會丟失,因此您需要每次都添加它(並因此有辦法「記住」在回發之間添加的內容)

+0

你知道一個樣本來做我想要的嗎? – TheFrancisOne

+0

是的:http://www.codeproject.com/Articles/8114/Dynamically-Created-Controls-in-ASP-NET – CyberDude

+0

謝謝,我嘗試使用序列化控件,但我有一個問題:我可以創建一個CHelloWorld實例在「OnClickButton」事件?我做不到,CHelloWorld沒有定義... – TheFrancisOne

0

我很高興ViewState爲您工作。

關於下一個問題,你有沒有正確的命名空間? (這可能值得在單獨的問題中提出)

+0

你是對的,我爲我的下一期創建新帖子。謝謝 – TheFrancisOne

相關問題