【问题标题】:Get User Input From Dynamic Controls从动态控件获取用户输入
【发布时间】:2009-03-16 02:56:59
【问题描述】:

我希望创建一个动态调查。我从数据库中生成所有问题控件的地方。下面是我正在尝试做的一个例子(没有数据库部分)。我能够显示如下所示的问题。我无法阅读用户输入。

有没有人有任何想法。

我已经查看了视图状态,但我似乎无法让它工作。

当页面通过 Post Back 重新加载时,控件消失了。我查看了我能想到的每一个事件,并且页面上没有控件。直到我在 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)
    {

    }
}

【问题讨论】:

    标签: c# asp.net viewstate dynamic-controls


    【解决方案1】:

    您必须生成具有唯一 ID 的控件。您必须能够用数据库中的一个问题对每个控件 ID 进行数学运算。完成此操作后,您可以将特定问题的答案写回到数据库中。

    【讨论】:

      【解决方案2】:

      编辑:在 OnInit 函数中创建控件(在 Init 事件期间)。检查this page

      尝试将“rb”或“tb”变量设为类范围。或者至少将创建的控件的引用存储在列表(或数组)中,然后在需要时尝试通过它访问它们。

      由于您在 OnInit 函数中创建控件,因此它们是在加载视图状态之前创建的。因此,当视图状态被加载时,用户发布的值会从视图状态恢复到控件,因此您可以从代码中访问它。您只需要保留对控件的引用即可。

      【讨论】:

        猜你喜欢
        • 2020-06-18
        • 2012-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多