【发布时间】:2011-07-28 20:26:47
【问题描述】:
我有这个问题,我正在尝试生成 HTML 以显示在来自数据库的页面上,该页面以模板的形式显示,该模板具有不同的大括号,在运行时被动态内容替换。例如,花括号 {Content} 被一些复选框列表、单选按钮列表、文本框和提交按钮替换。我这样做的方式是动态创建控件并将它们呈现为字符串,然后将该字符串输出到浏览器。但这所做的是,它在生成控件时无法识别分配给控件的事件。我可能对这个问题采取了错误的方法,但我真的不知道如何实现这一点。我在下面提供了一些示例代码来展示我想要实现的目标。请告知如何解决此问题。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim PageContent As StringBuilder = New StringBuilder()
PageContent.Append("A lot of content from database laid out using HTML templates stored in database including the below mentioned button code.")
'# To illustrate how pagecontent is built using lots of such controls rendered to string
Dim SubmitButton As Button = New Button()
SubmitButton.ID = "MySubmitButton"
SubmitButton.Text = "Submit"
SubmitButton.CssClass = "SubmitButton"
'Page.Controls.Add(SubmitButton) '# This line I thought would resolve the issue, but it doesn't as the .net form is not built at the time of page load
AddHandler SubmitButton.Click, AddressOf ClickHandler
PageContent.Append(RenderControlToString(SubmitButton))
Dim Output As Literal = New Literal()
Output.Text = PageContent.ToString()
Page.Controls.Add(Output)
End If
End Sub
''' <summary>
''' Button Click Hander
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub ClickHandler(ByVal sender As System.Object, ByVal e As System.EventArgs)
'# Control never gets here!!!!!
Response.Write("<br/>Button Clicked!")
Response.End()
End Sub
''' <summary>
''' Render control to string
''' </summary>
''' <param name="control"></param>
''' <returns></returns>
''' <remarks></remarks>
Private Function RenderControlToString(control As Control) As String
Dim sb = New StringBuilder()
Using sw = New StringWriter(sb)
Using textWriter = New HtmlTextWriter(sw)
control.RenderControl(textWriter)
End Using
End Using
Return sb.ToString()
End Function
感谢您的建议!
【问题讨论】:
标签: .net asp.net vb.net webforms