使用c#从动态控件获取值?

使用c#从动态控件获取值?,c#,asp.net,dynamic,controls,C#,Asp.net,Dynamic,Controls,我在我的项目上创建了几个radiobuttonlist控件,它们是在每次加载页面时创建的,我想获取用户选择的radiobutton的值,但是由于我的radiobutton是动态创建的,我不知道如何访问它们的值,也不知道如何创建它们的事件处理程序。当我创建控件时,是否有方法为其指定名称或id? 我希望你能帮助我 我在page_load事件上创建了一个radiobuttlist的seires,其中的文本及其值已从数据库中取出。现在,用户必须从radiobuttlist中选择一个选项,我想得到用户选中

我在我的项目上创建了几个radiobuttonlist控件,它们是在每次加载页面时创建的,我想获取用户选择的radiobutton的值,但是由于我的radiobutton是动态创建的,我不知道如何访问它们的值,也不知道如何创建它们的事件处理程序。当我创建控件时,是否有方法为其指定名称或id? 我希望你能帮助我

我在page_load事件上创建了一个radiobuttlist的seires,其中的文本及其值已从数据库中取出。现在,用户必须从radiobuttlist中选择一个选项,我想得到用户选中的radiobutton的值。如果我不知道radiobuttlist的名称和id,我该怎么做,因为它们是动态创建的。 这就是我得到的:

for (int i = 3; i < numfields; i++) {
            if (dr[i].ToString() != "" && dr[i] != null){
                r.Items.Add(new ListItem(dr[i].ToString(), dr[i].ToString()));
                //r.SelectedIndexChanged += new EventHandler(rowSelectedIndex);
            }
        }
for(int i=3;i
因此,基本上我使用datareader来循环数据库中的数据,如果字段中的值不是空的或null,那么我将向radiobuttlist添加一个名为“r”的项 我也曾尝试为此创建一个eventhandler,但由于我从未使用过它们,我真的不知道该怎么做(
如果我看起来太可怜,我很抱歉。

您可以在创建RadioButton时将其放入列表中。这也是您要添加处理程序的时候。

RadioButton rb;
for (int i = 1; i < 5; i++)
{
    rb = new RadioButton();

    rb.AutoSize = true;
    rb.Location = new System.Drawing.Point(25, (i*25) + 25);
    rb.Name = "radioButton" + i.ToString();
    rb.Text = "radioButton" + i.ToString();
    //Add some event handler?
    this.Controls.Add(rb);
    lstRadioButton.Add(rb);
}

如果编程名称对您来说不够,您可能正在搜索属性。

快速查看您的代码:

for (int i = 3; i < numfields; i++) { 
            if (dr[i].ToString() != "" && dr[i] != null){ 
                r.Items.Add(new ListItem(dr[i].ToString(), dr[i].ToString())); 
                //r.SelectedIndexChanged += new EventHandler(rowSelectedIndex); 
            } 
        } 
就好像dr[i]为null一样,您将得到一个异常(因为您将尝试对null对象调用ToString()方法)

如果DR的内容总是字符串,您可以考虑写:

if(!String.IsNullOrEmpty(dr[i]){
我还注意到您从3开始编制索引-这是因为您想跳过前3个字段吗

无论您在何处创建变量,'r',都可以设置名称和ID属性。您可以使用ID属性在回发时查找控件。因此,如果您像这样创建放射科医生:

RadioButtonList r = new RadioButtonList();
r.Id = "MyRadioButtonList";
r.SelectedIndexChanged += MyRadioButton_SelectedIndexChanged;
这将指向以下事件处理程序:

private void MyRadioButton_SelectedIndexChanged(Object sender, EventArgs e) {

    ... Do Stuff ...    

}
发回控件时,有几种方法可以查找控件;您可以在Request.Forms集合中查找与您提交的控件名称匹配的控件,或者更恰当地说,您可以使用FindControl方法和您提供给控件的ID。有关方法的帖子,请参阅(Jeff Atwood!)这将在控件的整个层次结构中搜索您的控件


添加动态控件时也很重要。如果在页面生命周期中添加得太晚,则在回发时将无法使用该控件。有关仅在添加控件时添加控件的详细信息,请参阅。也有大量用于动态ASP.Net控件的资源。

问题是您正在页面中创建控件为了将它们的值正确地发布回控件中,您必须将此创建移动到page_init方法中,并每次重新创建它们


然后,在page_load中,您可以正确访问控件中的值。如果您使用一致的命名约定为它们提供ID,您将能够使用FindControl方法找到它们,或者在page_init中,您可以将它们存储在页面或用户控件级别的集合中。

这不是答案,请等待获得足够的代表。您可以选择吗t请提供一些示例代码?还请注意,如果希望查看当前获得的内容,则在将表单提交到服务器时,您应该能够看到Request.Form集合中的值。
RadioButtonList r = new RadioButtonList();
r.Id = "MyRadioButtonList";
r.SelectedIndexChanged += MyRadioButton_SelectedIndexChanged;
private void MyRadioButton_SelectedIndexChanged(Object sender, EventArgs e) {

    ... Do Stuff ...    

}