2014-10-07 3 views
1

У меня есть динамически генерируемые радиокнопки, Как я могу получить идентификатор, если динамические радиообъекты в текстовом поле (textbox2), когда я нажимаю на выбранную кнопку , приведенный ниже код работает только для создания элементов управления (радио и текстовых полей), я имею в виду, что btnload работает, но btnselected не работает (динамические элементы управления просто исчезают, а textbox2 ничего не dispalys).Как получить идентификатор выбранного динамического радиообмена VB.NET с помощью ASP.NET

<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 

ответ

1

Если btnselected_Click срабатывает событие, когда происходит отбор затем вы можете бросить sender объект в случае делать что-то вроде:

Dim selectedRdo = DirectCast(sender, RadioButton) 
0

Вы воссоздающих кнопки каждый раз? Динамические элементы управления должны воссоздаваться при каждой обратной передаче. Они должны быть созданы в нужное время, обычно событие OnLoad является последним, которое я буду использовать (Page_Load слишком поздно). Вы должны сделать это, чтобы он существовал и привязывался к представлению во времени для второго вызывающего события, которое должно быть вызвано, где размещенные данные сопоставляются с элементами управления. Они также должны иметь одинаковый идентификатор каждый раз, когда они создаются, или же он не работает.

Теперь, в вашем случае, чтобы связать радиокнопку с текстовым полем, должно быть хорошо, поскольку ваш текстовый файл имеет идентификатор, который является целым числом, и ваш радиообъект также имеет идентификатор, который совпадает с текстовым полем.

Первый вопрос, хотя это обеспечение правильного создания элементов управления каждый раз.