获取动态创建的单选按钮的值
本文关键字:单选按钮 创建 动态 获取 | 更新日期: 2023-09-27 18:13:09
我用这种方式创建了一个单选按钮数组:
RadioButton[] radio = new RadioButton[size];
for (int i = 0; i < size ; i++)
{
radio[i] = new RadioButton();
radio[i].ID = "voted"+i.ToString();
radio[i].GroupName = "voted";
Session[radio[i].ID] = radio[i];
}
,当用户点击按钮时,事件是
protected void Votes_Click(object sender, EventArgs e)
{
RadioButton r=new RadioButton();
for (int i = 0; i < (int)Session["cancount"]; i++)
{
r=(RadioButton)(Session["voted" + i.ToString()]);
if (r.Checked)
{
//Do somethings;
}
}
}
但是r.checked
的值始终是false
,为什么不改变??
这个问题缺少很多上下文,但是考虑到你似乎在写你的网站的完全奇怪的方式,我想问题是你从来没有添加单选按钮控制页面的控制层次。此外,我猜您正在Page_Load事件中创建单选按钮,而不是Page_Init事件,这是一个问题,因为它们不会从回发中拾取点击,因为它们是在ASP.NET处理点击之后添加的。
如果这对你来说没有任何意义,那么你需要多读一点关于ASP是如何实现的。净工作。您不能完全像对待桌面应用程序那样对待它。事件和它们的处理程序是通过HTTP post分开的,这使得如何以及在哪里创建和初始化控件变得非常敏感。
去掉所有会话状态的东西,被点击的按钮作为'发送者'传递给事件处理程序。要访问被点击的单选按钮只需将其转换为单选按钮这就是你的对象:
RadioButton r = (RadioButton)sender;
你也最好使用RadioButtonList而不是你正在设置的Session变量。然后在页面上添加RadioButtonList,并在循环中添加按钮:
myRbl.Items.Add(new ListItem("text", i.ToString(), true));