问候!
我有一个“代码生成器”页面,用户可以在其中选择各种单选按钮,并生成HTML标记(主要是SCRIPT标记),可以在页面上使用这些标记来显示一些数据。还有一个“预览”区域,以便他们可以在将代码复制/粘贴到其网站中之前查看结果。该表单存在于FormView控件中,并由UpdatePanel包装,如下所示:
<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" />
它在copyBox TextBox(TextBox1)中成功生成代码,可能如下所示:
<script src="http://example.com/src/Constants.js"></script>
<script>
showIPAddress = 0;
DisplayServerStatus();
</script>
同时,我使用复制码TextBox(TextBox1)中的文本更新“预览”区域的Literal控件(Literal1)。不在UpdatePanel内时,预览会完美显示,但在预览时不起作用(我更喜欢使用UpdatePanel来防止页面刷新)。我在PreRender事件期间更新了“预览”区域和copycode文本:
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
UpdateCodeSnippetAndPreviewArea();
}
任何想法为什么预览在UpdatePanel中不会更新?
答案 0 :(得分:0)
使用UpdatePanel时未更新的原因是ASP .NET AJAX框架不处理服务器返回的任何内联javascript。看一下使用服务器端的ScriptManager.RegisterStartUpScript方法来注册内联javascript的执行。基本上,您可以使用此方法在面板更新后启动自定义javascript的执行。在您的情况下,您的自定义JavaScript需要适当地解释预览脚本(即检测脚本标记,动态注册它们然后执行给定的函数)。
希望这有帮助!
罗兰