[英]which loading event to use for assigning to Asp.Net HiddenField
我需要从localStorage获取一个值(ClientId)到代码隐藏。 这对于使用先前会话中的“客户端”设置登录时非常方便,该客户端存储有:
C#:
string script = string.Format("localStorage.clientId = '{0}';", _MySession.CurrentClientId);
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "key", script, true);
(请参阅: 此SO问题 )
为了将数据从localStorage返回到后台代码,似乎为此创建了asp.HiddenField
元素:可以轻松地使用JavaScript编写该元素,并可以从后台代码中读取该元素:
HTML:
<asp:HiddenField ID="hf_ClientId" runat="server" />
JS:
document.getElementById("<%=hf_ClientId.ClientID%>").value = localStorage.clientId;
代码隐藏,C#(在MasterPage中):
var v = hf_ClientId.Value;
但是,后面的代码在Page_Load中,并且在构造html和运行JS在$ {document).ready中运行之前运行,因此没有接收到任何值。
然后我试图移动到JS theForm.onsubmit
其运行为通过钩__doPostBack
。 我使用Firefox F12调试器和VisualStudio C#调试器,通过单击表单上的某些按钮,验证了回发后立即在C#之前调用JS,但在那里仍然没有收到值。
我在做什么错以及如何解决这个问题?
阅读这个问题,我尝试了一个简单得多的隐藏字段:
HTML:
<input type="hidden" id="hf_ClientId" name="hf_ClientId" />
C#:
if (IsPostBack)
string StoredClientId = Request.Form["hf_ClientId"];
JavaScript也更简单,因为runat = server属性消失了:
JS:
document.getElementById("hf_ClientId").value = localStorage.clientId;
或者,使用jQuery(未经测试的val语法可能错误):
$('#hf_ClientId').val(localStorage.clientId);
这有效,现在有数据。
另外,C#部分可以在隐藏字段所在的母版页中,也可以在主页中。 只需添加一条评论,因为它有点像意大利面条。
因为对我来说,这是一个登录页面,所以此C#代码位于“登录”按钮的回调中,因此它始终是回发。 简单!
我认为,您正在调试第一个(初始)请求。 此处未设置HiddenField。 要查看HiddenField值,必须在代码发布到服务器后调试它。 尝试在您的Load事件中添加检查:
if (Page.IsPostBack)
{
//Here you can read your hidden field
}
尝试将准备就绪的文档添加到javascript调用的代码背后
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "key", "$(document).ready(function(){'" + script + "'}", true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.