【发布时间】:2011-06-16 22:42:45
【问题描述】:
在我的 ASP.NET 页面中,我有一个更新面板,在 updatepanel_Load 事件中,我有以下代码:
if (!IsPostBack || triggeredRefresh.Value == "1")
{
HiddenField hiddenField = new HiddenField();
hiddenField.ID ="hiddenField1";
hiddenField.Value = "0";
placeHolder1.Controls.Add(hiddenField);
}
else if ( triggeredCheck.Value == "1" )
{
HiddenField hiddenField = placeHolder1.FindControl("hiddenField1") as HiddenField;
var x = Convert.ToInt32(hiddenField.Value);
}
所以基本上我将 hiddenFields 添加到占位符,然后使用客户端脚本设置它们的值,然后尝试在 updatepanel_Load 事件中的异步回发中再次读取这些值。
问题在于 FindControl 返回 null,因为此时 placeholder1.Controls.Count 为 0。为什么是零?我在回发之前添加了隐藏字段。
感谢您的帮助
【问题讨论】:
-
在初始 updatepanel_Load *
-
为什么要以编程方式添加 HiddenField?我认为问题在于它字段在生命周期中被创建和销毁,并且视图状态不会为它保留任何价值。此外,如果您要在后面的代码中添加控件,我会在 Init 阶段执行以避免其他视图状态问题。
-
您是否检查过
if块是否在else if之前执行?只是想确认triggeredRefresh和triggeredCheck是否设置正确。 -
Reddy,是的,我已经检查过了,并且 if 块的第一部分总是首先执行.. Layoric 我正在以编程方式添加该字段,因为我实际上是在循环遍历数据库中的行并添加根据数据库中的内容动态隐藏字段...有更好的方法吗?
标签: javascript .net asp.net asynchronous postback