我有一个自定义控件,可以在异步回发上为我工作。通常,我会使用ASPX页面上的以下代码直接从演示文稿中调用控件:
<mytag:CustomControl runat="server">
html (or other text) goes here
</mytag:CustomControl>
但是,在我目前的应用程序中,我需要使用类似于以下内容的代码从代码隐藏中动态创建控件:
Dim myControl As myClass.CustomControl = New myClass.CustomControl
myControl.ID = "someID"
myControl.?????? = "html (or other text) goes here"
Me.Controls.Add(myControl)
当动态地将控件添加到页面时,如果以正常的非动态方式添加控件,如何添加通常位于开始和结束标记之间的信息?
由于
这是实际控制:
Protected Overloads Overrides Sub Render(ByVal writer As HtmlTextWriter)
Dim scriptmanagerPage As ScriptManager = ScriptManager.GetCurrent(Page)
If scriptmanagerPage Is Nothing Then
'Do nothing
Else
'See if we are in a postback
If scriptmanagerPage.IsInAsyncPostBack Then
'We are in a postback; register the script
Dim stringbuilderWorking As New StringBuilder()
MyBase.Render(New HtmlTextWriter(New StringWriter(stringbuilderWorking)))
Dim stringScript As String = stringbuilderWorking.ToString()
ScriptManager.RegisterStartupScript(Me, GetType(ScanWorkXAJAX), UniqueID, stringScript, False)
Else
'Not in a postback
MyBase.Render(writer)
End If 'In an async postback
End If 'Scriptmanager present
End Sub
答案 0 :(得分:3)
数据是什么意思?更多控件?
您可以使用
myControl.Controls.Add(childControlHere);
编辑问题澄清后:
添加文字控件。即。
myControl.Controls.Add(new LiteralControl("<b>hello world</b><script type='text/javascript'>alert('hi');</script>"));
答案 1 :(得分:0)
您的意思是FIND并将数据附加到动态控件中的控件吗?
您可以使用WebControl.FindControl方法查找嵌入在自定义控件中的控件,然后可以通过其属性添加数据。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.findcontrol.aspx
答案 2 :(得分:0)
这取决于您使用的自定义控件的属性。您可能必须绑定到要显示的模板才能触发事件,这实际上取决于您的具体控制。
答案 3 :(得分:0)
能够使用文字控件完成此操作。
上面的代码加上:
Dim myLiteral As LiteralControl = New LiteralControl
myLiteral.ID = "myLiteral"
myLiteral.Text = "html (or some other text) goes here"
myControl.Controls.Add(myLiteral)