"Preview area" in UpdatePanel is not updating
Hello!
I have a "code builder" page where users select various radio buttons and generate HTML markup (mostly SCRIPT tags) that they can use on their page to display some data. There is also a preview area so they can see the results before copying / pasting the code to their site. The form exists in the FormView control and is wrapped by the UpdatePanel as follows:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:FormView ID="FormView1" runat="server" DataSourceId="XmlDataSource1">
<ItemTemplate>
<div id="configArea">
<ul>
<li>
<%# XPath("Steps/Step1/ServerStatus") %><br />
<asp:RadioButton ID="RadioButton1" runat="server" GroupName="OneA" Checked="true" AutoPostBack="true" Text='<%# XPath("Steps/Step1/YesOption") %>' />
<asp:RadioButton ID="RadioButton2" runat="server" GroupName="OneA" AutoPostBack="true" Text='<%# XPath("Steps/Step1/NoOption") %>' />
</li>
<li>
<%# XPath("Steps/Step1/Uptime") %><br />
<asp:RadioButton ID="RadioButton3" runat="server" GroupName="OneB" Checked="true" AutoPostBack="true" Text='<%# XPath("Steps/Step1/YesOption") %>' />
<asp:RadioButton ID="RadioButton4" runat="server" GroupName="OneB" AutoPostBack="true" Text='<%# XPath("Steps/Step1/NoOption") %>' />
</li>
<li>
<%# XPath("Steps/Step1/IPAddress") %><br />
<asp:RadioButton ID="RadioButton5" runat="server" GroupName="OneC" Checked="true" AutoPostBack="true" Text='<%# XPath("Steps/Step1/YesOption") %>' />
<asp:RadioButton ID="RadioButton6" runat="server" GroupName="OneC" AutoPostBack="true" Text='<%# XPath("Steps/Step1/NoOption") %>' />
</li>
</ul>
</div>
<div id="copyCode">
<%# XPath("Steps/Step2/CopyPasteCode") %><br />
<asp:TextBox ID="Textbox1" runat="server" TextMode="MultiLine" Width="300" Height="300" />
</div>
<div id="previewArea">
<%# XPath("Steps/Step3/PreviewTitle") %><br />
<asp:Literal ID="Literal1" runat="server" />
</div>
</ItemTemplate>
</asp:FormView>
</ContentTemplate>
</asp:UpdatePanel>
<asp:XmlDataSource ID="XmlDataSource1" runat="server" XPath="Root/Data" />
It successfully generates code in copying TextBox (TextBox1) that might look something like this:
<script src="http://example.com/src/Constants.js"></script>
<script>
showIPAddress = 0;
DisplayServerStatus();
</script>
At the same time, I am updating the Preview area of the Literal control (Literal1) with the text from the TextBox (TextBox1) copycode. The preview displays fine if not inside the UpdatePanel, but doesn't work when it is (and I would rather use the UpdatePanel to prevent page updates). I update the preview area and copy the text during the PreRender event:
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
UpdateCodeSnippetAndPreviewArea();
}
Any ideas why the preview isn't updating when it's in the UpdatePanel?
a source to share
The reason it doesn't update when using the UpdatePanel is because the ASP.NET AJAX framework does not handle the inline javascript returned by the server. Have a look at using the ScriptManager.RegisterStartUpScript server side method to register inline javascript execution. Essentially, you can use this method to trigger custom javascript execution after panel refresh. In your case, your custom javascript will need to interpret the script preview appropriately (i.e., detect script tags, register them dynamically, and then execute the given functions).
Hope this helps!
Roland
a source to share