UpdatePanel中的“预览区域”未刷新

时间:2009-05-21 14:59:53

标签: asp.net asp.net-ajax updatepanel

问候!

我有一个“代码生成器”页面,用户可以在其中选择各种单选按钮,并生成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中不会更新?

1 个答案:

答案 0 :(得分:0)

使用UpdatePanel时未更新的原因是ASP .NET AJAX框架不处理服务器返回的任何内联javascript。看一下使用服务器端的ScriptManager.RegisterStartUpScript方法来注册内联javascript的执行。基本上,您可以使用此方法在面板更新后启动自定义javascript的执行。在您的情况下,您的自定义JavaScript需要适当地解释预览脚本(即检测脚本标记,动态注册它们然后执行给定的函数)。

希望这有帮助!

罗兰