在我的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);
}
所以基本上我将hiddenField添加到占位符,然后使用客户端脚本设置它们的值,然后尝试在updatepanel_Load事件中的异步回发上再次读取值。
问题是FindControl返回null,因为此时placeholder1.Controls.Count为0。它为什么为零?我在回发之前添加了隐藏字段。
感谢您的帮助
答案 0 :(得分:2)
动态添加的任何控件都会在回发时消失。因此,返回页面时不存在。就像Layoric所说的那样,它在页面生命周期中被破坏了。我会说,如果你可以把隐藏场内联,因为它是一个隐藏的领域,如果你不需要它,那就不要看它(它仍然可以坐在那里)。
请记住,当ASP.NET页面被“回发”时,它会经历整个页面生命周期。这意味着当页面首次加载时,它会通过页面preinit,init,load,prerender,render等等。然后当它被回发时,它至少会进行preinit,init和load(也可能还有其他事件)在发生任何事件之前,我不记得我的头脑。
答案 1 :(得分:1)
使用此HttpContext.Request.Form[hiddenField1.UniqueID]
。
答案 2 :(得分:0)
为什么HttpContext.Request.Form["hiddenField1"]
不起作用?