【问题标题】:ASP.NET toggle control visibility from code behindASP.NET 从后面的代码切换控件可见性
【发布时间】:2011-10-29 08:54:24
【问题描述】:

我有两个我不确定是否相关的问题:

我有两个 DropDownList 控件(最初设置为不可见)和一个 RadioButtonList 控件,其中自动回发行为设置为 true。

每当回发发生时,我都想从 RadioButtonList 控件中读取 SelectedValue 属性 - 并根据这一点,使 DropDownLists 之一可见。

这是我的问题:

1) 我不能通过 ID 直接引用 RadioButtonList 控件。 Designer.cs 文件似乎没有生成 RadioButtonList 或 DropDownList 控件。即使我手动将控件添加到 Designer.cs 文件,它们在重新生成时也会丢失。这是预期的行为吗?

2) 我尝试在 Page_Load() 方法中使用 Page.FindControl 属性。

if(Page.PostBack==true)
{
    RadioButtonList rbl = (RadioButtonList)Page.FindControl("RadioButtonList1");
    if(rbl.SelectedValue=="optionA")
    {
         DropDownList ddA = (DropDownList)Page.FindControl("DropDownListA");
         ddA.Visible = true;   
    }
    else
    {
         DropDownList ddB = (DropDownList)Page.FindControl("DropDownListB");
         ddB.Visible=true;
    }
}

但是我在 if 条件下得到了 NullReferenceException。

我完全走错了吗?有人会指导我实现我想做的最佳方式吗?

另外,我该怎么做才能让 Designer.cs 文件加载控件?


编辑:/facepalm

我自己想通了。我忘记了我在表格中使用控件。

将控件移到表格之外后,我可以直接引用 ID。

应该归咎于缺乏睡眠和咖啡。我很抱歉。感谢您的帮助!

【问题讨论】:

    标签: c# asp.net code-behind


    【解决方案1】:

    Page.FindControl 不是递归的,即如果 dropdownlist1 控件位于其他控件中,它将返回 null。 检查此链接以获取详细信息,看看您是否能够正确找到下拉列表。

    http://www.mha.dk/post/Recursive-PageFindControl.aspx

    【讨论】:

      【解决方案2】:

      您正在为 rb1.SelectedValue 分配一个值,您应该检查是否找到了控件。

      if(rb1.SelectedValue="optionA") 
      

      应该是

      if(rb1.SelectedValue != null)
      { 
         if(rb1.SelectedValue == "optionA")
         {
             DropDownList ddA = (DropDownList)Page.FindControl("DropDownListA"); 
      
             if (ddA != null)
                       ddA.Visible = true;  
         }
      } 
      

      【讨论】:

      • 抱歉,写这篇文章的时候打错了。我在我的 IDE 中正确设置了它,但仍然出现错误。 [更正帖子]
      • 我注意到 Page.FindControl("RadioButtonList1") 返回一个空值。但我可以验证我是否已在设计器视图中添加了具有该特定 ID 的控件。 (我仍然在 Designer.cs 中看不到它——所以也许这就是问题所在?)
      • 如果您在设计视图中将控件添加到 UI,则无需使用 FindControl,只需使用 ID。
      • 是的,我也是这么想的。但正如我在帖子中所说,我无法通过 ID 引用它(甚至 FindControl 都无法找到它)我显然在我的 UI 中有控制权。关于可能是什么问题的任何想法?
      【解决方案3】:

      如果您无法通过 ID 引用控件,并且 FindControl 失败,则可能是您的控件在 aspx 文件中缺少 runat="server" 标记。

      是这样吗?

      【讨论】:

        猜你喜欢
        • 2019-04-30
        • 2011-03-12
        • 1970-01-01
        • 1970-01-01
        • 2020-09-20
        • 2011-09-10
        • 2011-04-08
        • 2013-10-14
        • 1970-01-01
        相关资源
        最近更新 更多