哪个加载事件用于分配给Asp.Net HiddenField

时间:2018-08-07 13:44:24

标签: javascript c# asp.net local-storage

我需要从localStorage获取一个值(ClientId)到代码隐藏。使用上一个会话的“客户端”设置登录时非常方便,该会话存储在:

C#:

string script = string.Format("localStorage.clientId = '{0}';", _MySession.CurrentClientId);
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "key", script, true);

(请参阅:this SO question

要使数据从localStorage返回到代码隐藏,asp.HiddenField元素似乎是为此而制作的:可以轻松地使用JavaScript编写该元素,并可以从代码隐藏中读取该元素:

HTML:

<asp:HiddenField ID="hf_ClientId" runat="server" />

JS:

document.getElementById("<%=hf_ClientId.ClientID%>").value = localStorage.clientId;

代码隐藏,C#(在母版页中):

var v = hf_ClientId.Value;

但是,其背后的代码在Page_Load中,并且在之前运行,因此html被构造并且JS在$(document)中运行。就绪,因此没有接收到任何值。

然后,我尝试将JS移至theForm.onsubmit作为挂钩运行的__doPostBack。我使用Firefox F12调试器和VisualStudio C#调试器,通过单击表单上的某些按钮,验证了回发后立即在C#之前调用JS,但在那里仍然没有收到值。

我做错了什么以及如何解决?

3 个答案:

答案 0 :(得分:2)

阅读{{3}}时,我尝试了一个更简单的隐藏字段:

HTML:

st_within()

C#:

<input type="hidden" id="hf_ClientId" name="hf_ClientId" />

JavaScript也更简单,因为runat = server属性消失了:

JS:

if (IsPostBack)
  string StoredClientId = Request.Form["hf_ClientId"];

或者使用jQuery(未经测试的val语法可能是错误的):

document.getElementById("hf_ClientId").value = localStorage.clientId;

这有效,现在有数据。

作为奖励,C#部分可以位于隐藏字段所在的母版页中,也可以在主页中。只需添加一条评论,因为它有点像意大利面条。

因为对我来说,这是一个登录页面,所以此C#代码位于“登录”按钮的回调中,因此它始终是回发。简单!

答案 1 :(得分:1)

我认为,您正在调试第一个(初始)请求。此处未设置HiddenField。 要查看HiddenField值,必须在代码发布到服务器后调试它。 尝试在您的Load事件中添加检查:

    if (Page.IsPostBack)
{
    //Here you can read your hidden field
}

答案 2 :(得分:0)

尝试将准备就绪的文档添加到javascript调用的代码中

{{1}}