«Область предварительного просмотра» в UpdatePanel не обновляется - PullRequest
0 голосов
/ 21 мая 2009

Привет!

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

Он успешно генерирует код в текстовом коде копирования TextBox (TextBox1), который может выглядеть примерно так:

<script src="http://example.com/src/Constants.js"></script>
<script>
    showIPAddress = 0;
    DisplayServerStatus();
</script>

В то же время я обновляю элемент управления Literal области «Предварительный просмотр» (Literal1) с помощью текста из кодекса TextBox (TextBox1). Предварительный просмотр отлично отображается, когда он не находится внутри UpdatePanel, но не работает, когда он есть (и я бы предпочел использовать UpdatePanel для предотвращения обновления страницы). Я делаю обновление области «предварительного просмотра» и текста копировального кода во время события PreRender:

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);

    UpdateCodeSnippetAndPreviewArea();
}

Есть идеи, почему предварительный просмотр не обновляется, когда он находится в UpdatePanel?

1 Ответ

0 голосов
/ 21 мая 2009

Причина, по которой он не обновляется при использовании UpdatePanel, заключается в том, что ASP .NET AJAX Framework не обрабатывает никакой встроенный JavaScript, возвращаемый сервером. Посмотрите на использование метода ScriptManager.RegisterStartUpScript на стороне сервера для регистрации выполнения встроенного JavaScript. По сути, вы можете использовать этот метод для запуска выполнения пользовательского JavaScript после обновления панели. В вашем случае ваш пользовательский javascript должен будет правильно интерпретировать сценарий предварительного просмотра (то есть обнаруживать теги сценария, регистрировать их динамически, а затем выполнять заданные функции).

Надеюсь, это поможет!

Роланда

...