如何使用ASP.NET获取所选动态单选按钮VB.NET的ID

时间:2014-10-07 13:53:54

标签: asp.net vb.net page-lifecycle

我已经动态生成了radiobuttons,当我点击所选按钮时,如果文本框(textbox2)中的动态radiobuttons,我如何获取id。 下面的代码只适用于生成控件(无线电和文本框),我的意思是btnload工作,但btnselected不起作用(动态控件只是消失,textbox2显示没有。)。

<html>
    <head id="Head1" runat="server">
    <title></title>
    </head>
    <body>
        <form id="form1" runat="server">         
                ​<asp:Panel ID="container" runat="server">

                </asp:Panel>       
            <div>
               <asp:Button ID="btnload" runat="server" Text="Load" />  
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                no of loops</div>
                <asp:Button ID="btnselected" runat="server" Text="selected" />
                <asp:TextBox ID="TextBox2" runat="server" style="margin-top: 26px"></asp:TextBox>
        </form>
    </body>
</html>

Protected Sub getradioId_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnload.Click

        Dim tbl As New Table
        tbl.Width = 500

        Dim i As Integer = 0

        Do Until i = TextBox1.Text
            Dim tblrow As New TableRow
            tblrow.Width = 80%

            Dim tblcellrad As New TableCell
            tblcellrad.Width = 100

            Dim tblcellname As New TableCell
            tblcellname.Width = 300

            Dim cand As New TextBox
            cand.ID = i

            i += 1
            Dim rad As New RadioButton   'generate controls (radiobuttons and textbox)
            rad.GroupName = "one"
            rad.ID = i
            rad.Text = "rad" & i
            cand.Text = "candidate " & i.ToString

            If i Mod 2 = 1 Then      'set row colour
                tblrow.Style.Add("background-color", "#EEEEEE")
            Else
                tblrow.Style.Add("background-color", "#E0E0E0")
            End If

            tblcellrad.Controls.Add(rad)    'add controls to cells
            tblcellname.Controls.Add(cand)

            tblrow.Controls.Add(tblcellname) 'add cells to rows
            tblrow.Controls.Add(tblcellrad)


            tbl.Controls.Add(tblrow) 'add row to table
            container.Controls.Add(tbl)

        Loop
    End Sub

Protected Sub btnselected_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnselected.Click
        Dim radios = Controls.OfType(Of RadioButton).AsQueryable()

        For Each r As RadioButton In radios
            If r.Checked Then
                TextBox2.Text = r.ID.ToString
            End If
        Next
    End Sub

2 个答案:

答案 0 :(得分:1)

如果btnselected_Click是选择发生时触发的事件,那么您可以在执行以下操作时强制转换sender对象:

Dim selectedRdo = DirectCast(sender, RadioButton)

答案 1 :(得分:0)

您每次都在重新创建按钮吗?必须在每次回发时重新创建动态控件。它们需要在正确的时间创建,通常OnLoad事件是我将使用的最后一个事件(Page_Load为时已晚)。您必须这样做才能使它存在并且及时绑定到视图状态以便调用第二个回发事件,其中发布的数据与控件匹配。他们每次创建时都必须具有完全相同的ID,否则它就无法工作。

现在,在你的情况下,将单选按钮与文本框匹配应该很漂亮,因为你的文本框有一个id,这是一个整数,你的radiobutton也有一个id,它与textbox相同。 / p>

第一个问题是确保每次都正确地创建控件。