繁体   English   中英

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

[英]asp.net cannot access to dynamically created controls

我正在加载页面时创建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

您已经在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;

FindControl不会进行深度搜索。 您向Panel1添加了单选按钮,但调用了Page FindControl

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

另一件事。 删除if (!Page.IsPostBack)条件。 Button1_Click触发时,页面处于回发状态,如果希望找到它们,则必须创建动态控件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM