从动态生成的单选按钮列表中检索值
本文关键字:列表 检索 单选按钮 动态 | 更新日期: 2023-09-27 18:24:44
我正在向页面动态添加一个单选按钮列表列表,点击按钮我想存储所选的值。下面是这个示例代码。如何检索这些动态创建的RadioButtonList的SelectedIndex?我花了一天的大部分时间在网上尝试其他类似问题的各种修复方法,但运气不佳。如果我在Chrome中使用"检查元素",我可以在它们想要的位置看到RadioButtonList,表面上带有我分配的ID(RBQuestion_1、RBQuestion_2等),
Sub BindForm()
Dim tblStars As New Table()
Dim rb As New RadioButtonList()
rb.ID = RBQuestion_" & row("Id")
Dim tc As New TableCell()
Dim tr As New TableRow()
tc.Controls.Add(rb)
tr.cells.Add(tc)
tblStars.Rows.Add(tr)
form1.Controls.Add(tblStars)
Next
end sub
Protected Sub btnSave_click(ByVal sender As Object, ByVal e As EventArgs)
For Each ctrl As Control In Page.FindControl(RBQuestion_" & row("Id"))
If TypeOf ctrl Is RadioButtonList Then
Dim rbl As RadioButtonList = DirectCast(ctrl, RadioButtonList)
For i As Integer = 0 To rbl.Items.Count - 1
If rbl.Items(i).Selected Then
'get the value of the selected radio button'
Dim value As String = rbl.SelectedItem.Value
End If
Next
End If
Next
end sub
您正在查看页面的控件列表。
你的收音机按钮不会在那里。它们位于添加它们的TableCell的控制列表中。
你需要找到你的表,然后遍历每一行,为每一行找到单元格,然后在单元格内找到单选按钮。
或者,您可以尝试在创建按钮时将其添加到RadioButton类型的对象范围通用列表控件中。然后直接从btnSave_Click事件处理程序中引用它们专业版:无需导航控件层次结构Con:将代码与实际底层实现拉开距离。当开发者在未来查看时,这可能会误导这些控件的真实位置。。。在你有时间忘记自己做了什么以及为什么做之后,这一套可能包括你自己。对我来说,在一个好日子里,这通常是4个小时。
因此,我更喜欢导航层次结构方法,因为它更真实地反映了事物的实际布局。但我非常确信通用列表方法也会起作用。
编辑
我认为您缺少的部分是覆盖CreateChildControls方法。
我承认你的问题是用VB表达的。但我对VB不太熟悉,所以我改用C#。希望这对你来说足够有意义。
在ASP.NET Development Server中托管时,确认此功能在VS 2010中正常工作。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication3
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void CreateChildControls()
{
base.CreateChildControls();
this.CreateRadioButtons();
}
private void CreateRadioButtons()
{
var tblStars = new Table();
tblStars.ID = "tblStars";
ListItem opt1 = new ListItem();
opt1.Text = "I like red";
opt1.Value = "Red";
ListItem opt2 = new ListItem();
opt2.Text = "I like green";
opt2.Value = "Green";
ListItem opt3 = new ListItem();
opt3.Text = "I like blue";
opt3.Value = "Blue";
var rb = new RadioButtonList();
rb.ID = "RBQuestion_1";
rb.Items.Add(opt1);
rb.Items.Add(opt2);
rb.Items.Add(opt3);
var tc = new TableCell();
var tr = new TableRow();
tc.Controls.Add(rb);
tr.Cells.Add(tc);
tblStars.Rows.Add(tr);
form1.Controls.Add(tblStars);
}
protected void btnSave_Click(object sender, EventArgs e)
{
var tblStars = this.form1.FindControl("tblStars") as Table;
if (tblStars == null)
return;
foreach (TableRow row in tblStars.Rows)
{
foreach (TableCell cell in row.Cells)
{
var rb = cell.FindControl("RBQuestion_1") as RadioButtonList;
if (rb == null)
continue;
var selectedValue = rb.SelectedValue;
}
}
}
}
}
我对应的页面标记:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication3.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />
</div>
</form>
</body>
</html>