0

我的 asp.net 页面上有一个复选框列表和文本框控件,它们是动态创建并添加到页面中的。当我填充值并提交表单时,当它到达服务器时,这些值是空的。有什么帮助吗?

4

2 回答 2

1

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

在不知道要添加控件的ASP.NET 页面生命周期中的确切点的情况下(尽管我猜它是 Page_Load 或事件处理程序),它是这样的:

  • 构建控制树
  • 添加动态控件
  • 使成为

(回传)

  • 构建控制树
  • 重构视图状态并绑定到 Post 值
  • 添加动态控件
  • 使成为

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

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

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

于 2009-10-14T15:13:55.557 回答
0

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

于 2009-10-14T15:18:25.227 回答