Javascript ASP.Net get ScriptManager.RegisterClientScriptBlock在UpdatePanel hiddenField上返回

Javascript ASP.Net get ScriptManager.RegisterClientScriptBlock在UpdatePanel hiddenField上返回,javascript,asp.net,ajax,updatepanel,registerclientscriptblock,Javascript,Asp.net,Ajax,Updatepanel,Registerclientscriptblock,我正在尝试使用ScriptManager.RegisterClientScriptBlock获取调用ont服务器端的Javascript函数的返回 目前,我的javascript函数将值保存在UpdatePanel中包含的HiddenField中。调用该方法时,我运行ScriptManager.RegisterClientScriptBlock,然后获取HiddenField的值,但总是返回上一次调用的值。我在这里展示代码: 我的用户控件ASPX端: <script> var nu

我正在尝试使用ScriptManager.RegisterClientScriptBlock获取调用ont服务器端的Javascript函数的返回

目前,我的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>
        <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>
索引页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>
        <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>

你不能同时做这些事情

  • 使用javascript通过
    RegisterClientScriptBlock
    RegisterStartupScript
    从服务器端代码设置隐藏字段的值
  • 并同时检索服务器端代码中隐藏的字段值
  • 这是因为,(更改的)隐藏字段值仅在有回发时才对服务器端代码可用,当您从服务器端设置值时,不会发生回发,这就是为什么您总是获得以前的值,即回发到页面的旧值

    编辑


    当您调用
    RegisterClientScriptBlock
    RegisterStartupScript
    时,它不会立即调用
    JS
    ,而只是在
    之前或之后追加一个
    javascript调用
    ,在调用RegisterClientScriptBlock之后是否有办法回发?还是另一种方法?Thnks@也许我不清楚你在这里的要求,为什么你需要这样的东西,因为它们相互冲突,比如你触发javascript的回发,你在调用
    RegisterClientScriptBlock
    后不会得到那个值,也更新了答案,添加了更多的解释。我正在做一个谷歌地图用户控件。我可以使用服务器端方法(如micontrol.insertMarker())的异步调用放置标记。。。但是我无法从map-like控件中获取信息。getCenter()(始终使用ajax)@Migue,唯一的一件事,我可以告诉你,你需要重新考虑这件事的设计,可能是只使用
    javascript
    处理所有事情,或者可能是服务器端代码。