【问题标题】:How to access the viewstate of a programmatically added UserControl during page init?如何在页面初始化期间访问以编程方式添加的 UserControl 的视图状态?
【发布时间】:2012-02-03 17:12:17
【问题描述】:

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

但是我需要在创建这些按钮时访问视图状态(我使用视图状态来记住用户数据)。

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);
}

我了解到视图状态在 In​​it 事件期间不可用。但是如果按钮是在 Init 之后创建的,则它们不会触发它们的事件(OnClick 等)。

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

【问题讨论】:

    标签: asp.net viewstate


    【解决方案1】:

    我不认为你可以。不理想,但在这种情况下,我会将用户数据放在Session 中。动态控件很难使用,我认为这是权衡之一。 ViewState 在Page_Init 之后加载 - 这个forum post 确认

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

    当然,其他人可能知道不同。

    【讨论】:

    • 谢谢。在使用隐藏字段并使用Request.Form 阅读其内容时,它似乎有效。我仍然不明白为什么动态控件不容易使用。我会尽量避免它们^^
    猜你喜欢
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多