在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>
控件,这是通过代码隐藏填充的。
更新
我暂时解决了我提供的问题作为答案。
我仍然非常有兴趣听到任何其他建议/解决方案
答案 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>
之前呈现。