【发布时间】: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