在 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
之前呈现制作完成。
关于c# - 在标记中使用函数返回的服务器控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34061369/