繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM