ASP.NET在部分回发后获取隐藏字段的值

时间:2011-06-16 22:42:45

标签: javascript .net asp.net asynchronous postback

在我的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。它为什么为零?我在回发之前添加了隐藏字段。

感谢您的帮助

3 个答案:

答案 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"]不起作用?