【问题标题】:Hidden field loses value in codebehind?隐藏字段在代码隐藏中失去价值?
【发布时间】:2018-05-26 16:46:45
【问题描述】:

我正在尝试使用 HiddenField 将数据从客户端传递到服务器。

Javascript/UI.ascx

<asp:HiddenField ID="PassArgs" runat="server" EnableViewState="true"/>
//Tried using EnableViewState, but still no luck


<script>

document.getElementById("<%=PassArgs.ClientID%>").value = JSON.stringify(SP.UI.ModalDialog.get_childDialog().get_args());
alert(document.getElementById("<%=PassArgs.ClientID%>").value); 
//Alert shows correct data to be passed

</script>

但是,当我尝试从代码隐藏访问我的 HiddenField 时,我的结果是空的。

代码隐藏

var jss = new JavaScriptSerializer();

var dict = jss.Deserialize<Dictionary<string, dynamic>>(PassArgs.Value);
//PassArgs.Value = ""     --- whyyyy???

我将这个问题作为最后的手段发布,因为我花了一整天的时间来研究类似的问题,但我无法让这个问题适合我的情况。

为什么我的“PassArgs”警报包含正确的值,但我后面的代码显示为空?我尝试过使用 HiddenFields、TextBoxes 和 Labels,但结果都是一样的。

编辑:当脚本运行时,HiddenField 似乎具有正确的值,我认为这不是问题,但我认为脚本在 iv 已经尝试在代码隐藏中访问它之后运行。我认为这可能是 HiddenField 显示为空的原因,因为脚本尚未运行。在我的调试器进入代码隐藏 (UI.ascx.cs) 以访问它之前,如何让它在 UI.ascx 中运行?

【问题讨论】:

  • 您是否在代码隐藏的某处重置PassArgs?例如,在页面的Load 事件处理程序中。
  • @ConnorsFan 不,除了 javascript 之外,它不会在其他任何地方设置
  • @Reeggiie 你什么时候读取后面代码中的值?按下按钮或类似的东西后?因为hiddenfield的值需要先post到服务器上。
  • @VDWWD 是的,点击按钮后
  • 您的表单中有UpdatePanel吗?

标签: javascript c# asp.net webforms


【解决方案1】:

你可以从服务器变量中获取数据,所以你可以通过调用Request.Form["PassArgs"]来获取值,它会返回你的请求值,你也可以解析你的表单Convert.ToString(Request.Form)的请求集合的结果

否则,您可以使用具有隐藏样式的 TextBox 字段,以防它仍然无法正常工作

<asp:TextBox ID="PassArgs" runat="server" style="display:none;"></asp:TextBox>

【讨论】:

  • 这两种方法我都试过了,我后面的代码仍然检索到null。
猜你喜欢
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多