如何在页面初始化期间访问以编程方式添加的UserControl的视图状态?

时间:2012-02-03 17:12:17

标签: asp.net viewstate

我在页面上有一组以编程方式添加的用户控件(它们是在主页面的Init事件期间创建和添加的)。这些控件中的每一个都以编程方式在他自己的Init事件中添加按钮 (因此它是动态创建控件的“两个级别”。不知道它是否重要。)

我需要在创建这些按钮时访问viewstate (我使用viewstate来记住用户数据)。

protected void Page_Init(object sender, EventArgs e)
{
    // I need my ViewState right now !
    Button myButton = new Button();
    myButton.Text = "Click me";
    myButton.Command += new CommandEventHandler(myCommandHandler);
    myButton.CommandName = "Delete";
    myButton.ID = "myButtonID";
    myPlaceholder.Controls.Add(myButton);
}

我知道在Init事件期间viewstate不可用。但是如果它们是在Init之后创建的,那么按钮不会触发它们的事件(OnClick等)。

  • 如何创建动态控件同时访问视图状态?

1 个答案:

答案 0 :(得分:1)

我认为你不能。不太理想,但我会在这个实例中将用户数据放在Session中。动态控制很难处理,我认为这是权衡之一。 ViewState在Page_Init后加载 - 此forum post确认

另一种选择可能是将信息存储在您自己的隐藏字段中。这些将在回发期间在Request.Form集合中提供,并且可用。当然,如果你创建它们runat="server"(你可能不得不这样做),框架会将所有命名容器ID附加到名称中,这样你在挖掘它们时就必须有点聪明。它会变得有点hacky,所以我很想坚持会议

当然,其他人可能会有所不同。