Hi All
Sometimes you want to render a server control's HTML to a string. Here's how you do that (I took this code from http://www.codeproject.com/aspnet/DAtaGridExportToExcel.asp):
Function GetControlSource(ByVal ctrl As System.Web.UI.WebControls.WebControl) As String
Dim srcWriter As New IO.StringWriter, htmlWriter As _
New System.Web.UI.HtmlTextWriter(srcWriter)
ctrl.RenderControl(htmlWriter)
Return srcWriter.ToString
End Function
But then, often you'd like to render the updated HTML back to the client. Suppose you edit an article and want to change its author. You try to choose it from the list and then discover that you have to add a new author. Normally you'll have to go to a separate page and add the author there, than return back and choose the new author. A more natural way would be to add the author here and then have the author list refresh without page refreshing.
So, we can easily add an author using the ClientAPI. Bu how to render the dropdownlist with the newly added author? If you try the code above, you'll have an error because the control is not a part of a page. Here comes my hack. If you use Lutz Roeder's Reflector, you'll see that the exception comes from the Page's VerifyRenderingInServerform Method. Fortunately, it's overridable, so we can just add the following code to the CDefault class:
Public
Overrides Sub VerifyRenderingInServerform(ByVal control As System.Web.UI.Control)
End Sub
Now you can use the code to send any control's source to the client. The client handler should substitute the control's source with the new one, and you can have everything refresh smoothly without postbacks.
Hope this helps
Ulu