获取动态创建的单选按钮的值

本文关键字:单选按钮 创建 动态 获取 | 更新日期: 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));