复杂的标题,那。我仍然对客户端和服务器端代码的交互方式有所了解,所以如果我是愚蠢的话,那就好吧。
基本上,我在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中吗?