0

我的代码隐藏 (c#) 文件使用 while() 循环为我的数据库中任何给定数量的问题动态声明 RadioButtonLists:

我在 for 循环中向每个 tmpRBL 添加项目。

我将每个 RadioButtonList 注册到我在 while() 循环的每次迭代开始时创建的子面板。

然后我将每个面板添加到父面板。

while(reader.Read()
{ 
    ...

    RadioButtonList tmpRBL = new RadioButtonList();
    temp = "RadioButtonList" + count.ToString();
    tmpRBL.ID = temp;
    tmpRBL.RepeatDirection = System.Web.UI.WebControls.RepeatDirection.Vertical;
    tmpRBL.TextAlign = System.Web.UI.WebControls.TextAlign.Left;

    ...

    for (int i = 1; i <= numAnswers; i++)
    {
        tmpItem = new ListItem("", i.ToString());
        tmpRBL.Items.Add(tmpItem);
    }

    ...

    p.Controls.Add(tmpRBL);

    ...

    questionPanel.Controls.Add(p);

}

如何检索这些动态创建的 RadioButtonLists 的 selectedIndexes?我花了一天的大部分时间尝试在线其他类似问题的各种修复,但没有运气。

如果我在 Chrome 中使用“检查元素”,我可以在表面上使用我分配的 ID(RadioButtonList1、RadioButtonList2 等)在他们想要的位置看到 RadioButtonList,但我尝试的所有操作都以空对象结束。

我对 C# 比较陌生,这是我第一次处理动态控件,非常感谢您提供的任何帮助。

4

2 回答 2

3

基本上,如果您动态创建控件,则需要在页面的每个回帖中重新加载这些控件(具有相同的 id)。

否则,它们将变为空,您将无法访问它们。

这是一个示例。它动态加载RadioButtonList控件并在单击按钮时显示所选值。

<asp:PlaceHolder runat="server" ID="PlaceHolder1"/>
<asp:Button runat="server" ID="Button1" OnClick="Button1_Click" Text="Submit" />
<asp:Label runat="server" ID="Label1"/>

protected void Page_Load(object sender, EventArgs e)
{
    LoadControls();
}

protected void Button1_Click(object sender, EventArgs e)
{
    var radioButtonList = PlaceHolder1.FindControl("1") as RadioButtonList;
    Label1.Text = radioButtonList.SelectedValue;
}

private void LoadControls()
{
    var tmpRBL = new RadioButtonList();
    tmpRBL.ID = "1";

    for (int i = 1; i <= 5; i++)
    {
        var tmpItem = new ListItem(i.ToString(), i.ToString());
        tmpRBL.Items.Add(tmpItem);
    }

    PlaceHolder1.Controls.Add(tmpRBL);
}
于 2013-05-23T21:13:08.207 回答
0

非常感谢。同样,我最终设法控制了其他控件:-)。这是 vb.net 中的代码隐藏。

我现在很幸运:-)

从动态创建的 RadioButtonList 和 TextBox 创建和检索值

Private Property RadioButtonList As RadioButtonList
    Private Property TextBoxList As TextBox


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        LoadControls()

    End Sub           



    Protected Sub Button111_Click(sender As Object, e As EventArgs)
        Dim majstor_rbl(3) As String
        Dim majstor_txt(3) As String

        For i As Integer = 1 To 3
            RadioButtonList = TryCast(PlaceHolder1.FindControl(i & "rbl"), RadioButtonList)
            majstor_rbl(i) = RadioButtonList.SelectedValue
            TextBoxList = TryCast(PlaceHolder1.FindControl(i & "txt"), TextBox)
            majstor_txt(i) = TextBoxList.Text
        Next

        txt_podatak4.Text = majstor_rbl(1) & " - " & majstor_txt(1)
        txt_podatak5.Text = majstor_rbl(2) & " - " & majstor_txt(2)
        txt_podatak6.Text = majstor_rbl(3) & " - " & majstor_txt(3)
    End Sub

    Private Sub LoadControls()
        For j As Integer = 1 To 3

            Dim tmpRBL As Object = New RadioButtonList
            Dim tmpTXT As Object = New TextBox

            tmpRBL.ID = j & "rbl"
            tmpTXT.ID = j & "txt"



            For i As Integer = 1 To 3
                Dim tmpItem As Object = New ListItem("&nbsp;&nbsp;&nbsp;", i.ToString())
                tmpRBL.Items.Add(tmpItem)
            Next


            tmpRBL.RepeatLayout = RepeatLayout.Flow
            tmpRBL.RepeatDirection = RepeatDirection.Horizontal


            PlaceHolder1.Controls.Add(tmpTXT)
            PlaceHolder1.Controls.Add(tmpRBL)
            PlaceHolder1.Controls.Add(New LiteralControl("</br>"))
        Next

    End Sub

.aspx

    <asp:PlaceHolder runat="server" ID="PlaceHolder1"/>
    <asp:Button runat="server" ID="Button3" OnClick="Button111_Click" Text="Submit" />
<asp:TextBox ID="txt_podatak4" runat="server" CssClass="form-control"></asp:TextBox>
<asp:TextBox ID="txt_podatak5" runat="server" CssClass="form-control"></asp:TextBox>
<asp:TextBox ID="txt_podatak6" runat="server" CssClass="form-control"></asp:TextBox>
于 2014-07-29T20:51:26.387 回答