服务器端代码在Javascript更新后读取旧控件值

服务器端代码在Javascript更新后读取旧控件值,javascript,asp.net,postback,Javascript,Asp.net,Postback,复杂的标题,那个。我仍然掌握着客户端和服务器端代码如何交互的诀窍,所以如果我很愚蠢的话,请善待我 基本上,我在ASP.NET Web表单页面上有一个服务器端隐藏的HiddenField。当我在页面的其他地方单击一个控件时,会调用一个Javascript函数来更新HiddenField的值,并触发回发。然而,当我随后在回发后读取HiddenField的值时,即使我确实用Javascript对其进行了更改,但我知道它是有效的,因为我尝试将HiddenField替换为一个标签,以便我可以实际看到它已更

复杂的标题,那个。我仍然掌握着客户端和服务器端代码如何交互的诀窍,所以如果我很愚蠢的话,请善待我

基本上,我在ASP.NET Web表单页面上有一个服务器端隐藏的HiddenField。当我在页面的其他地方单击一个控件时,会调用一个Javascript函数来更新HiddenField的值,并触发回发。然而,当我随后在回发后读取HiddenField的值时,即使我确实用Javascript对其进行了更改,但我知道它是有效的,因为我尝试将HiddenField替换为一个标签,以便我可以实际看到它已更改,读取的值是旧值,就像Javascript更改它之前一样

我猜有些事情我不明白,用Javascript更改控件的值不会在服务器的页面视图中更新它,但我有点卡住了。我在下面发布了一些非常简单的代码,试图说明我的问题

ASP

加载此页面时,如果单击按钮btnTest,按钮的OnClientClick属性中的Javascript会将按钮上的文本更改为“After”。但是,在评估按钮文本时,隐藏的代码在填充标签lblTest时仍然返回“Before”


标签位于UpdatePanel中,因为单击按钮会触发整页回发,btnTest的文本会恢复为“Before”,我也不太理解,因为按钮是一个服务器端控件,它指定了runat=server,因此,当回发发生时,它的文本肯定应该存储在页面的ViewState中?

您应该看到您的页面加载方法。可能有东西正在还原按钮的文本…页面加载为空。上面的代码就是页面上所有的代码和后面的代码。
<body>
<form id="form1" runat="server">
    <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></asp:ToolkitScriptManager>
<div>
    <asp:Button ID="btnTest" runat="server" Text="Before" OnClientClick="this.value = 'After'" />
    <asp:UpdatePanel ID="upTest" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnTest" EventName="click" />
        </Triggers>
        <ContentTemplate>
            <asp:Label ID="lblTest" runat="server" Text="Before click" />
        </ContentTemplate>
    </asp:UpdatePanel>
</div>
</form>
Protected Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click

    lblTest.Text = btnTest.Text

End Sub