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

时间:2015-12-03 08:44:55

标签: 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>控件,这是通过代码隐藏填充的。

更新

我暂时解决了我提供的问题作为答案。

我仍然非常有兴趣听到任何其他建议/解决方案

1 个答案:

答案 0 :(得分:1)

要回答我自己的问题,我有以下临时解决方案......

根据我的假设,我使用let params : [Dictionary<String,Dictionary<String,String>>] = [ [ "filter" : [ "name":"john", "city":"NY" ] ] ] requestURL.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: []) 并将其传递给函数(现在转换为子函数)...

<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>之前呈现。