【问题标题】:ASP.NET find all Controls on a page and hide themASP.NET 查找页面上的所有控件并隐藏它们
【发布时间】:2011-02-04 22:31:19
【问题描述】:

我试图在 Page_Load 上隐藏我所有的 RadioButtonLists,但我似乎无法完全正确地理解语法

我猜我必须使用类似这样的 FindControl 语法

CType(FindControl, RadioButtonList)

然后我猜我将不得不遍历每个 RadioButtonList 并在其上设置 Visible = False 属性。

上面的代码似乎出错了。

有什么我可以尝试的想法吗?

谢谢

【问题讨论】:

    标签: asp.net loops radiobuttonlist


    【解决方案1】:

    试试这个:

    protected void Page_Load(object sender, EventArgs e)
    {
        HideRadioButtonLists(Page.Controls);
    }
    
    private void HideRadioButtonLists(ControlCollection controls)
    {
        foreach (WebControl control in controls.OfType<WebControl>())
        {
            if (control is RadioButtonList)
                control.Visible = false;
            else if (control.HasControls())
                HideRadioButtonLists(control.Controls);
        }
    }
    

    【讨论】:

      【解决方案2】:

      FindControl 仅在您知道要查找的控件的名称时才有效,而且它不是递归调用。除非您可以保证您的控件将在您正在搜索的特定容器中,否则您将找不到它。如果要查找所有单选按钮列表,则需要编写一个方法,循环遍历父/子关系中的所有控件集,并将单选按钮列表设置为 false。

      只需将Page.Controls 传递给此函数(未经测试,可能需要调整):

      public void HideRadioButtonLists(System.Web.UI.ControlCollection controls)
      {
          foreach(Control ctrl in controls)
          {
              if(ctrl.Controls.Count > 0) HideRadioButtonLists(ctrl.Controls);
              if("RadioButtonList".Equals(ctrl.GetType().Name, StringComparison.OrdinalIgnoreCase))
                  ((RadioButtonList)ctrl).Visible = false;
          }
      }
      

      【讨论】:

      • 谢谢,这正是我所追求的
      • 我个人更喜欢我的语法,但这显然是一个见仁见智的问题。我真的不喜欢您如何将字符串与类型的名称进行比较来确定控件是否属于该类型。你这样做有什么特别的原因吗?
      • @Bazzz - 旧习难改。
      【解决方案3】:

      为什么不使用 ASP.Net 皮肤页面将所有 RadioButtonLists 的默认值设置为 visible = false。

      我会在这里考虑使用皮肤页面。

      【讨论】:

        【解决方案4】:

        对 Controls 属性执行 foreach 并检查类型会很慢。在我看来,根据您的要求,您应该做的是使用 CSS / 皮肤来隐藏不需要的按钮,或者只是将它们添加到 List&lt;T&gt;,这样您就可以只遍历那些您需要修改的按钮。

        最坏的情况下,foreach 会起作用,但它有点慢且不可取。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-01-19
          • 1970-01-01
          • 2019-07-08
          • 2010-09-21
          • 1970-01-01
          • 2011-02-11
          • 1970-01-01
          相关资源
          最近更新 更多