ASP.Net在UpdatePanel hiddenField上获取ScriptManager.RegisterClie

ASP.Net get ScriptManager.RegisterClientScriptBlock return on UpdatePanel hiddenField

本文关键字:获取 ScriptManager RegisterClie hiddenField Net UpdatePanel ASP      更新时间:2023-09-26

我正试图获得一个Javascript函数的返回,我使用ScriptManager.RegisterClientScriptBlock.在服务器端调用该函数

目前,我的javascript函数将值保存在UpdatePanel中包含的HiddenField中。当我调用该方法时,我运行ScriptManager.RegisterClientScriptBlock,然后获取HiddenField的值,但总是返回上一次调用的值。在这里我显示代码:

我的用户控制ASPX侧:

<script>
var num = 0;
function getReturn() {
    num = num + 1;
    var hr= document.getElementById('<%= hdf.ClientID %>');
    hRetorno.value = num;
}
</script>
...
<asp:UpdatePanel ID="up1" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
        <asp:HiddenField ID="hdf" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

我的用户控制服务器端代码:

    public String GetReturn()
    {
        return MyControl.jsGetReturn(this.Page, this.hdf);
    }
    private static String jsGetReturn(Page page, HiddenField hid)
    {
        ScriptManager.RegisterStartupScript(page, page.GetType(), "key", "getReturn();", true);
        return hid.Value;
    }

索引页ASPX侧:

        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div style="width:720px; height:480px;">
            <uc1:MyControl runat="server" id="MyControl1"/>
        </div>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Button ID="btn" runat="server" OnClick="btn_Click" />
                <asp:TextBox ID="txt" runat="server" ></asp:TextBox>
            </ContentTemplate>
        </asp:UpdatePanel>

索引页服务器端代码:

    protected void btn_Click(object sender, EventArgs e)
    {
        txt.Text = MyControl1.GetReturn();
    }

不能同时做这些事情。

  1. 通过RegisterClientScriptBlockRegisterStartupScript使用javascript从服务器端代码设置隐藏字段的值
  2. 同时在服务器端代码中检索隐藏的字段值

这是因为,(更改的)隐藏字段值只有在有回发时才可用于服务器端代码,当您从服务器端设置该值时,不会发生回发,这就是为什么您总是得到以前的值,即回发到页面的旧值。

编辑

当您调用RegisterClientScriptBlockRegisterStartupScript时,它不会立即调用JS,而是根据您使用的内容在<form..标记之前或之后添加一个javascript call,它们在文档加载时被调用,这意味着在jsGetReturn中,当您调用RegisterStartupScript时,它将在文档加载中设置隐藏字段的值,hid.Value不会有更新的值,因为它还没有通过文档加载增加。