我有一个包含多个按钮的用户控件,根据按下的按钮,不同的控件会添加到页面中(假设按钮 1 添加一个文本框,按钮 2 添加一个标签)。
我的代码大致如下:
protected void but1_click(object sender, EventArgs e)
{
TextBox tb = new TextBox();
tb.ID = "tb1";
paramsCtrlDiv.Controls.Add(tb);
}
protected void but2_click(object sender, EventArgs e)
{
Label lb = new Label();
lb.ID = "lb1";
paramsCtrlDiv.Controls.Add(lb);
}
然后我有第三个按钮(button3)来获取页面上的所有控件及其值。 (假设本例中每个按钮仅单击一次)。
我的问题是当按下button3时,paramsCtrlDiv.controls数组不包含已添加的控件。我知道我需要在每次回发的 Page_Load 时间添加这些控件。我的问题是,因为我不确切知道用户添加了哪些控件,所以我不知道要添加什么 Page_Load (可能有一个文本框,然后是标签,只是一个标签或只是一个 tb),我可以不控制用户按下的内容。
我知道我可以存储会话中的所有内容,但我不确定这是一个优雅的解决方案。不同选项卡上还可以有此控件的多个实例,因此每个实例都必须正确维护其自己的控件集合
因为您是动态执行此操作,所以您需要一种存储您正在执行的操作的方法,以便服务器可以为每个操作重新创建它PostBack
。如果你不想使用Session
,将数据存储在ViewState
(无论时间如何,它都将持续存在于页面中)。创建一个List<YourControlObjects>
并确保它是Serializable
然后将其存储在ViewState
。您可能想要存储控件类型、位置等,以便可以在其上重建它Page_Load
每次有一个PostBack
.
问题归结为您需要为这些动态创建的控件维护自己的状态。这只是一个建议,但您可以通过多种不同的方式来做到这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)