我希望创建一个动态调查。我从数据库生成所有问题控件的位置。下面是我尝试做的一个例子(没有数据库部分)。我能够显示如下所示的问题。我无法读取用户输入。
有没有人有任何想法。
我已经查看过viewstate,但我似乎无法让它工作。
当通过Post Post重新加载页面时,控件消失了。我查看了我能想到的每一个事件,并且页面上没有控件。直到我在Page_Load事件上再次创建它们。
在哪里可以找到动态创建的控件上的用户输入值?
页
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
代码文件
protected override void OnPreLoad(EventArgs e)
{
base.OnPreLoad(e);
foreach (Control item in form1.Controls)
{ }
}
protected void Page_PreInit(object sender, EventArgs e)
{
foreach (Control item in form1.Controls)
{ }
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
foreach (Control item in form1.Controls)
{ }
}
protected override void OnSaveStateComplete(EventArgs e)
{
base.OnSaveStateComplete(e);
foreach (Control item in form1.Controls)
{ }
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
foreach (Control item in form1.Controls)
{ }
}
protected void Page_Load(object sender, EventArgs e)
{
RadioButton rb;
rb = new RadioButton();
rb.ID = "rb_1";
rb.Text = "yes";
rb.GroupName = "question";
form1.Controls.Add(rb);
rb = new RadioButton();
rb.ID = "rb_2";
rb.Text = "no";
rb.GroupName = "question";
form1.Controls.Add(rb);
rb = new RadioButton();
rb.ID = "rb_3";
rb.Text = "other";
rb.GroupName = "question";
form1.Controls.Add(rb);
TextBox tb = new TextBox();
form1.Controls.Add(tb);
Button btn = new Button();
btn.Text = "Save";
form1.Controls.Add(btn);
foreach (Control item in form1.Controls)
{
}
}
答案 0 :(得分:1)
您必须使用唯一ID生成控件。您必须能够在数据库中只使用一个问题来计算每个control-id。完成此操作后,您可以将特定问题的答案写回数据库。
答案 1 :(得分:1)
编辑:在OnInit函数中创建控件(在Init事件期间)。检查this page。
尝试将'rb'或'tb'变量设为类范围。或者至少将对已创建控件的引用存储在列表(或数组)中,然后尝试在需要时通过它进行访问。
由于您在OnInit函数中创建控件,因此在加载视图状态之前会创建它们。因此,当加载视图状态时,用户发布的值将从视图状态恢复到控件,因此您可以从代码中访问它。您只需要保留对控件的引用。