我在页面上有一组以编程方式添加的用户控件(它们是在主页面的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等)。
答案 0 :(得分:1)
我认为你不能。不太理想,但我会在这个实例中将用户数据放在Session
中。动态控制很难处理,我认为这是权衡之一。 ViewState在Page_Init
后加载 - 此forum post确认
另一种选择可能是将信息存储在您自己的隐藏字段中。这些将在回发期间在Request.Form
集合中提供,并且可用。当然,如果你创建它们runat="server"
(你可能不得不这样做),框架会将所有命名容器ID附加到名称中,这样你在挖掘它们时就必须有点聪明。它会变得有点hacky,所以我很想坚持会议
当然,其他人可能会有所不同。