使用javascript在HiddenField中设置值

使用javascript在HiddenField中设置值,javascript,asp.net,session,hidden-field,Javascript,Asp.net,Session,Hidden Field,我在ASP.NET上使用javascrip设置HiddenField的值时遇到问题 我的密码是: <asp:HiddenField ID="hidden" Value="before" runat="server" /> 我在ASP.NET中的JS代码是: function HandleIT(id) { alert(document.getElementById('<%=hidden.ClientID %>').value); document.ge

我在ASP.NET上使用javascrip设置HiddenField的值时遇到问题 我的密码是:

<asp:HiddenField ID="hidden" Value="before" runat="server" />
我在ASP.NET中的JS代码是:

function HandleIT(id) {

    alert(document.getElementById('<%=hidden.ClientID %>').value);

    document.getElementById('<%=hidden.ClientID %>').value = "test";

    alert(document.getElementById('<%=hidden.ClientID %>').value);

    <%Session["search"] = hidden.Value;%>

    window.location.assign("Search.aspx");
}
因此,第一个警报显示之前,第二个警报显示测试。到现在为止,一直都还不错。但是当它转到Search.aspx,我正在使用Session[Search]时,它会显示我之前的状态 知道为什么会这样吗?

这句话:

<%Session["search"] = hidden.Value;%>
从codebehind获取在客户端进行任何更改之前呈现的值。 因此,该值是最初渲染时字段的默认值

编辑: 我认为您不能以这种方式在ASPX页面中精确地设置会话。 这是因为ASP.net的生命周期。 您必须进行回发以获取隐藏字段的新值。回发可能会调用完整回发或部分回发,甚至是ajax回发

我认为一开始可能使用公共财产,但事实并非如此。 你可以查一下

正如您所知,即使我们希望将值从javascript传递到codebehind,我们也必须使用hiddenfields,如


无论如何,我认为您必须在codebehind中设置会话的值。

设置会话变量的代码在呈现页面时和运行JavaScript之前运行。这就是客户端代码和服务器端代码之间的区别。

谢谢,所以有更好的方法使其工作吗?正如我所说,您必须在返回后设置会话值,如单击按钮或。。。在codebehind中。有很多技巧可以做到这一点,但您的代码并不完整,很难提供完美的帮助。什么时候叫HandleIT?您可以将codebehind单击事件指定给会话中codebehind set中的按钮或隐藏按钮。