У меня есть проблема, когда я пытаюсь сгенерировать 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
Спасибо за совет!