在标记中使用函数返回的服务器控件
本文关键字:函数 返回 服务器控件 | 更新日期: 2023-09-27 18:25:24
在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>
控件的东西,它是通过后面的代码填充的。
更新
我对这个问题有一个临时的解决办法,我已经提供了答案。
我仍然非常有兴趣听到任何其他建议/解决方案
为了回答我自己的问题,我有以下临时解决方案。。。
根据我的假设,我正在使用<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" />
注意顺序很重要-Sub
调用必须在<asp:PlaceHolder>
控件之前,否则无法工作。我认为这是因为占位符在调用Sub
之前进行渲染。