在ASP.NET中异步回发后更新Javascript

时间:2011-02-04 16:41:21

标签: javascript asp.net ajax postback

我的网站上有以下代码:

    <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,并且它不会更新。我很肯定会话变量IS正在改变。有谁知道为什么会这样?感谢您的投入!

非常感谢你!

2 个答案:

答案 0 :(得分:5)

在按钮处理程序中尝试此操作:

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);

答案 1 :(得分:0)

我确信有更好的方法可以做到这一点,但我在处理更新面板中返回的javascript的黑客涉及注册一个函数,该函数在任何已更新的UpdatePanel中查找新的javascript,然后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>

如果有人有,我绝对愿意接受更清洁的解决方案。