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

时间:2014-09-05 12:27:45

标签: javascript asp.net postback

复杂的标题,那。我仍然对客户端和服务器端代码的交互方式有所了解,所以如果我是愚蠢的话,那就好吧。

基本上,我在ASP.NET Web窗体页面上有一个服务器端隐藏的 HiddenField 。当我单击页面上其他位置的控件时,将调用Javascript函数来更新 HiddenField 的值,并触发回发。但是,当我随后在回发后读取 HiddenField 的值时,即使我确实用Javascript更改了它(我知道它有效,因为我尝试交换 HiddenField 一个标签所以我实际上可以看到它已经改变了),读取的值是旧值,就像Javascript改变之前一样。

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

ASP

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

VB.NET代码背后

Protected Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click

    lblTest.Text = btnTest.Text

End Sub

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

标签位于 UpdatePanel 中,因为否则单击按钮会触发整页回发,而 btnTest 的文本将恢复为“之前”,我也不会我不太明白,因为Button是一个服务器端控件(指定了runat=server),所以当回发发生时,它的文本肯定会存储在页面的ViewState中吗?

0 个答案:

没有答案