2015-12-03 44 views
2

在ASP.NET 4.0中,是否可以有一個函數返回一個服務器控件,並且能夠通過內聯代碼調用該函數,該代碼將服務器端控件放置在呈現的HTML?在標記中使用函數返回的服務器控件

注:以下是VB.NET,但很容易被C#等

例如,說我有一個功能...

Public Function GetImageButton(ByVal id As String) As ImageButton 
    Dim btn As New ImageButton 
    btn.ID = id 
    AddHandler btn.Click, AddressOf btn_Click 
    Return btn 
End Function 

我想有在標記是類似於以下內容...

<div><%=GetImageButton("btn1")%></div> 

這將服務器控件定位在HTML中的該特定位置,但保留作爲一個標準的ASP.NET控件,與事件處理等

然而,上述顯然會造成以下的被渲染爲文字...

<div>System.Web.UI.WebControls.ImageButton</div> 

我的假設是,這是不可能的並且有必要擁有類似<asp:PlaceHolder>控件的控件,該控件通過代碼隱藏進行填充。


更新

我有一個臨時的解決方案,我已經提供了一個答案的問題。

我仍然會聽到任何其他建議很感興趣/解決方案

回答

1

要回答我的問題,我有以下的臨時解決方案...

按我假設我使用的是<asp:PlaceHolder>和通過它通過對功能(現在改成了分)...

Public Sub GetImageButton(ByVal plh as PlaceHolder, ByVal id As String) 
    Dim btn As New ImageButton 
    btn.ID = id 
    ... 
    plh.Controls.Add(btn) 
End Sub 

,然後使用調用它...

<%GetImageButton(plh1, "btn1")%> 
<asp:PlaceHolder runat="server" id="plh1" /> 

注意該命令很重要--調用必須在<asp:PlaceHolder>控制之前,否則它不起作用。我認爲這是因爲佔位符在致電Sub之前呈現。

+0

這是否真的不會在佔位符之前輸出控件的'.ToString()'文本?即使在源代碼中,如果它沒有被顯示在瀏覽器中?我有點驚訝它的作品,但如果它確實,那麼偉大:) – Rob

+1

@Rob - 如果它是一個函數,並且您使用了'<%= %>'那麼是的,它會 – freefaller

+0

Ack - 儘管您已經讓我注意到當我從問題中複製函數並將其轉換爲「Sub」時出現錯字。它不應該有返回類型,因爲這顯然是無效的語法 – freefaller

相關問題