asp.net无法访问动态创建的控件

时间:2014-10-31 12:51:03

标签: c# asp.net

我正在加载页面时创建了5个单选按钮:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            for (int i = 0; i < 5; i++)
            {
                RadioButton r = new RadioButton();
                r.Text = i.ToString();
                r.ID = i.ToString(); ;
                Panel1.Controls.Add(r);

            }
        }
    }

我想用另一种方法访问它们对应一个点击按钮,但我不能。 :

protected void Button1_Click(object sender, EventArgs e)
    {            
        RadioButton r = (RadioButton)FindControl("2");
        r.Checked = true;             
    }

当我执行findcontrol方法时,我得到以下异常:nullreferenceexception未被用户代码处理

3 个答案:

答案 0 :(得分:2)

您已在Panel1中添加了控件,因此您应该在那里找到它。

替换行:

RadioButton r = (RadioButton)FindControl("2");

使用:

RadioButton r = Panel1.FindControl("2") as RadioButton;
if(r != null)  //check for null reference, before accessing
    r.Checked = true;

答案 1 :(得分:1)

FindControl不进行深度搜索。您向Panel1添加了单选按钮,但调用FindControl的{​​{1}}。

Page

另一件事。删除RadioButton r = (RadioButton)Panel1.FindControl("2"); 条件。当if (!Page.IsPostBack)触发时,页面处于PostBack状态,如果您希望找到它们,则必须创建动态控件。

答案 2 :(得分:0)

您需要检查是否创建了控件,并且需要检查空值。你这样做是错误的。解决此错误首先检查对象是否已初始化,如果它已初始化,则表示引用变量未接收到值。请查看以下链接以供参考: http://blog.mastersoftwaresolutions.com/why-null-reference-error-occurred/