提交后控件为空

时间:2009-10-14 15:11:12

标签: asp.net postback dynamic-controls

我的asp.net页面上有一个checkboxlist和textbox控件,它们是动态创建并添加到页面的。当我填充值并提交表单时,值在到达服务器时为空。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

它们是空的,因为它们在页面生命周期中被重新创建得太晚了。

在不知道ASP.NET Page Lifecycle中你添加控件的精确点(虽然我猜它是Page_Load或事件处理程序),但它是这样的:

  • 构建控制树
  • 添加动态控件
  • 渲染

(回传)

  • 构建控制树
  • 重建视图状态&绑定到帖子值
  • 添加动态控件
  • 渲染

要解决此问题,您需要确保在生命周期中尽早创建控件。标准做法是将“控件创建”分解为单独的方法,并在CreateChildControls期间检查是否需要创建它们:

override CreateChildControls()
{
    if(IsPostBack)
    {
        EnsureDynamicControlsAreAdded();
    }
}

这样,如果它们确实需要在生命周期的最后阶段作为事件处理程序(例如Button_Click)添加,那么您也可以从那里调用相同的EnsureDynamicControlsAreAdded方法,并且在下一次往返中,它们将在更早的时候创建。

答案 1 :(得分:0)

除了Rex M的答案之外,你可以尝试在“Page_Init”事件中创建控件 - 这是页面生命周期中的第一个事件之一,我通常会在viewstateless页面中创建控件(注意:如果你这样做,不要用“if (!IsPostback)”包围Page_Init处理程序的内容 - 这将阻止它按预期工作。

相关问题