我有一个在ASP.NET上使用javascrip在HiddenFiled上设置值的问题 我的HiddenFiled代码是:
<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”]时它向我显示“之前” 任何想法,为什么它是幸福的?
答案 0 :(得分:0)
这一行:
<%Session["search"] = hidden.Value;%>
从客户端的任何更改之前获取的代码隐藏中获取值。 因此,该值是首次渲染时字段的默认值。
修改强>
我认为你不能以这种方式和ASPX页面完全设置会话。
这是因为ASP.net的生命周期。
您必须进行回发以获取隐藏字段的新值。回发可能会调用完整的回发或部分回发,甚至是ajax回发。
我认为也许最初可能使用公共机构,但事实并非如此。 您可以查看This
如您所知,即使我们想要将值从javascript传递到代码隐藏,我们也必须使用像This这样的隐藏字段。
无论如何,我认为你必须在代码隐藏中设置会话的值。
答案 1 :(得分:0)
设置会话变量的代码在呈现页面时以及运行JavaScript之前运行。这是客户端n服务器端代码之间的区别。