Javascript 将哪个加载事件分配给Asp.Net HiddenField
我需要从localStorage获取一个值(ClientId)以进行代码隐藏。这对于使用上一个会话中的“客户端”设置登录非常方便,该设置存储在: C#: (见:) 为了将数据从localStorage返回到代码隐藏,可以使用Javascript 将哪个加载事件分配给Asp.Net HiddenField,javascript,c#,asp.net,local-storage,Javascript,C#,Asp.net,Local Storage,我需要从localStorage获取一个值(ClientId)以进行代码隐藏。这对于使用上一个会话中的“客户端”设置登录非常方便,该设置存储在: C#: (见:) 为了将数据从localStorage返回到代码隐藏,可以使用asp.HiddenField元素实现这一点:该元素可以很容易地用JavaScript编写,并且可以从代码隐藏中读取: HTML: 但是,代码隐藏在Page_Load中,在构建html和在$(document.ready)中运行JS之前运行,因此没有收到任何值 然后我尝试将J
asp.HiddenField
元素实现这一点:该元素可以很容易地用JavaScript编写,并且可以从代码隐藏中读取:
HTML:
但是,代码隐藏在Page_Load中,在构建html和在$(document.ready)中运行JS之前运行,因此没有收到任何值
然后我尝试将JS移动到表单.onsubmit
,该表单由\uu doPostBack
作为钩子运行。通过Firefox F12调试器和VisualStudio C#调试器,我通过单击表单上的某个按钮验证了在C#发生回发时,JS是否在C#之前被调用,但仍然没有收到任何值
我做错了什么以及如何解决这个问题?尝试将文档就绪添加到codebehind javascript调用中
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "key", "$(document).ready(function(){'" + script + "'}", true);
尝试将文档就绪添加到codebehind javascript调用
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "key", "$(document).ready(function(){'" + script + "'}", true);
我认为,您正在调试第一个(初始)请求。此处未设置HiddenField。 要查看HiddenField值,必须在代码发布到服务器后对其进行调试。 尝试在加载事件中添加检查:
if (Page.IsPostBack)
{
//Here you can read your hidden field
}
我认为,您正在调试第一个(初始)请求。此处未设置HiddenField。 要查看HiddenField值,必须在代码发布到服务器后对其进行调试。 尝试在加载事件中添加检查:
if (Page.IsPostBack)
{
//Here you can read your hidden field
}
阅读时,我尝试了一个更简单的隐藏字段:
HTML:
Javascript也更简单,因为runat=server属性消失了:
JS:
或者,使用jQuery(未测试,val语法可能错误):
这是可行的,现在有数据了
作为奖励,C#部分可以位于母版页(隐藏字段所在的位置)或主页中。只需添加一条评论,因为它有点像意大利面条
因为,对我来说,这是一个登录页面,这个C代码在登录按钮的回调中,所以它总是回发。简单 阅读时,我尝试了一个简单得多的隐藏字段:
HTML:
Javascript也更简单,因为runat=server属性消失了:
JS:
或者,使用jQuery(未测试,val语法可能错误):
这是可行的,现在有数据了
作为奖励,C#部分可以位于母版页(隐藏字段所在的位置)或主页中。只需添加一条评论,因为它有点像意大利面条
因为,对我来说,这是一个登录页面,这个C代码在登录按钮的回调中,所以它总是回发。简单 如果要为声明为
run at=“server”
的隐藏控件分配一个值,只需执行hf\u ClientId.value=somevalue代码>在代码中behind@ChetanRanpariya是,但该值尚未存储在localStorage中。在这里,我需要将数据从客户端移回后面的服务器代码。有什么建议吗?如果您想将数据从客户端发送到服务器,您必须通过回发或AJAX发出另一个HTTP请求。这将导致一些C#代码运行,此时您可以使用从客户端发送的值。@ADyson True。我在想,提交和相关的回发和Hiddefeld会对我起作用。流程是这样的——页面是第一次加载的。此时,客户端HTML甚至不存在。服务器向客户端发送HTML。客户端显示HTML,运行Javascript。因此,此时您可以从浏览器上的localstorage获取您的价值。现在,要将其发送回服务器,您必须发出回发或AJAX请求,并启动另一次C代码运行。如果您想为声明为runat=“server”
的隐藏控件分配一个值,那么只需执行hf\u ClientId.value=somevalue代码>在代码中behind@ChetanRanpariya是,但该值尚未存储在localStorage中。在这里,我需要将数据从客户端移回后面的服务器代码。有什么建议吗?如果您想将数据从客户端发送到服务器,您必须通过回发或AJAX发出另一个HTTP请求。这将导致一些C#代码运行,此时您可以使用从客户端发送的值。@ADyson True。我在想,提交和相关的回发和Hiddefeld会对我起作用。流程是这样的——页面是第一次加载的。此时,客户端HTML甚至不存在。服务器向客户端发送HTML。客户端显示HTML,运行Javascript。因此,此时您可以从浏览器上的localstorage获取您的价值。现在,要将其发送回服务器,您必须发出回发或AJAX请求,并启动另一次C#代码运行。这与我发布的代码相同,只是您使用JS“+”而不是string.Format,并且将数据从代码后台获取到JS没有问题。但是,您也可以使用RegisterClientScriptBlock从客户机获取值以进行代码隐藏吗?@Roland这不一样,它使用jQuery文档。ready()块以确保填充隐藏字段的代码在页面上的所有元素都准备好之前不会运行-确保在代码运行时隐藏字段肯定存在于浏览器DOM中(因为如果不存在,则字段不会更新,然后值也不会回发)。你的版本没有。这不是一个坏建议,尽管drzounds应该尝试解释原因。请注意,我不久前在对上述主要问题的一次评论中提到了这种可能性。@Roland P.S.如果您想在不必使用jQuery的情况下做同样的事情,请参见此处:@ADyson我在我的帖子中提到的$(document)用法。就绪。另外,这是关于从服务器到客户端获取数据的,这很好。我的问题是另一个方向无法从客户端到服务器获取数据的原因是没有填充hiddenfield
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "key", "$(document).ready(function(){'" + script + "'}", true);
if (Page.IsPostBack)
{
//Here you can read your hidden field
}
<input type="hidden" id="hf_ClientId" name="hf_ClientId" />
if (IsPostBack)
string StoredClientId = Request.Form["hf_ClientId"];
document.getElementById("hf_ClientId").value = localStorage.clientId;
$('#hf_ClientId').val(localStorage.clientId);