VB.NET以编程方式在标记之间添加代码

时间:2009-12-22 18:46:56

标签: vb.net ajax custom-controls

我有一个自定义控件,可以在异步回发上为我工作。通常,我会使用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

4 个答案:

答案 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)