Обновление Javascript после асинхронной публикации в ASP.NET - PullRequest
4 голосов
/ 04 февраля 2011

У меня на сайте есть следующий код:

    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <asp:UpdatePanel runat="server" id="UpdatePanel" updatemode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger controlid="myButton_btn" eventname="Click" />
    </Triggers>
        <ContentTemplate>
            <script>
                function pageLoad(){
                    window.alert("<%=Session("myVariable")%>"); 
                    }
                }
            </script>

        </ContentTemplate>
    </asp:UpdatePanel>

    <asp:Button ID="myButton_btn" Text="Prev Month" runat="server"></asp:Button>

При каждом нажатии кнопки запускается JavaScript.Однако, хотя моя подпрограмма обновляет переменную сеанса после нажатия кнопки, я всегда получаю одно и то же предупреждение.Другими словами, тот же самый javascript запускается после обратной передачи и не обновляется.Я уверен, что переменная сеанса изменяется.Кто-нибудь знает, почему это происходит?Я ценю ваш вклад!

Большое вам спасибо!

Ответы [ 2 ]

5 голосов
/ 04 февраля 2011

Попробуйте это в обработчике кнопок:

VB.Net

ScriptManager.RegisterStartupScript(Me.UpdatePanel, GetType(string), "alertScript", String.Format("alert('{0}');",Session("myVariable")), true)

C #

ScriptManager.RegisterStartupScript(this.UpdatePanel, typeof(string), "alertScript", string.Format("alert('{0}');", Session["myVariable"]), true);
0 голосов
/ 04 февраля 2011

Я уверен, что есть лучший способ сделать это, но мой хак для обработки javascript, возвращенного в панели обновления, включает в себя регистрацию функции, которая ищет новый javascript в любых UpdatePanels, которые были обновлены, а затем eval () их содержимое , Вот грубый пример:

Site.Master:

<script type="text/javascript">
    PageLoadedHandler = function(sender, args) {
        var panels = args.get_panelsUpdated();
        for (var i = 0; i < panels.length; i++) {
            var scripts = panels[i].getElementsByTagName('script');
            for (var j = 0; j < scripts.length; j++) {
                eval(scripts[j].innerHTML);
            }
        }
    }

    Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler);
</script>

Я определенно открыт для более чистых решений, если у кого-то есть такие.

...