c# - 在标记中使用函数返回的服务器控件

标签 c# asp.net vb.net

在 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/

相关文章:

c# - 代码在 Windows 服务项目中不起作用

.net - 如何从ListView控件的单个项目中删除复选框?

VB.NET 相当于 C# 中的无名变量?

c# - 如何为 IQueryable 应用表达式树?

c# - 无法在 WebApi 响应中设置 Content-MD5 header

.net - 您最喜欢的组织 ASP.NET 项目的约定是什么?

javascript - 当我在 textarea 中输入时,KnockoutJS 绑定(bind)到 div

c# - 如何将 C++ *.lib 文件转换为不安全的 C# 互操作?

c# - 如何使用 azure、wcf、asp.net 和 json 创建应用程序

c# - 为两个不同的 session 加载数据集