获得动态创建的radiobuttons的价值

时间:2013-05-12 17:58:59

标签: c# asp.net

我用这种方式创建了一系列单选按钮:

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,为什么它没有改变?

2 个答案:

答案 0 :(得分:1)

这个问题缺少大量的上下文,但鉴于你似乎在编写网站的方式完全奇怪,我想问题是你从未添加过单选按钮来控制页面的控件层次结构。另外,我猜你在Page_Load事件而不是Page_Init事件中创建了单选按钮,这是一个问题,因为它们不会从回发中获取点击,因为它们是在之后添加的单击由ASP.NET处理。

如果这对您没有任何意义,那么您需要阅读有关ASP.NET如何工作的更多信息。您无法像桌面应用程序那样对待它。事件及其处理程序由HTTP帖子分隔,从而使您对创建和初始化控件的方式和位置具有敏感性。

答案 1 :(得分:1)

摆脱所有会话状态的东西,被点击的按钮作为“发送者”传递给事件处理程序。要访问单击的单选按钮,只需将其转换为单选按钮,然后是您的对象:

RadioButton r = (RadioButton)sender;

您最好使用RadioButtonList而不是您正在设置的Session变量。然后只需在页面上添加RadioButtonList并在循环中添加按钮:

myRbl.Items.Add(new ListItem("text", i.ToString(), true));