How do I disable all controls in ASP.NET page?

后端 未结 9 1641
旧时难觅i
旧时难觅i 2020-12-14 08:17

I have multiple dropdownlist in a page and would like to disable all if user selects a checkbox which reads disable all. So far I have this code and it is not working. Any s

相关标签:
9条回答
  • 2020-12-14 08:49

    Each control has child controls, so you'd need to use recursion to reach them all:

    protected void DisableControls(Control parent, bool State) {
        foreach(Control c in parent.Controls) {
            if (c is DropDownList) {
                ((DropDownList)(c)).Enabled = State;
            }
    
            DisableControls(c, State);
        }
    }
    

    Then call it like so:

    protected void Event_Name(...) {
        DisableControls(Page,false); // use whatever top-most control has all the dropdowns or just the page control
    } // divs, tables etc. can be called through adding runat="server" property
    
    0 讨论(0)
  • 2020-12-14 08:51
      private void ControlStateSwitch(bool state)
    {
        foreach (var x in from Control c in Page.Controls from Control x in c.Controls select x)
            if (ctrl is ASPxTextBox)
    
                ((ASPxTextBox)x).Enabled = status;
    
            else if (x is ASPxDateEdit)
    
                ((ASPxDateEdit)x).Enabled = status;
    }
    

    I use a linq aproach. While using devExpress you must include DevExpress.Web.ASPxEditors lib.

    0 讨论(0)
  • 2020-12-14 08:56

    I know this is an old post but this is how I have just solved this problem. AS per the title "How do I disable all controls in ASP.NET page?" I used Reflection to achieve this; it will work on all control types which have an Enabled property. Simply call DisableControls passing in the parent control (I.e., Form).

    C#:

    private void DisableControls(System.Web.UI.Control control)
    {
        foreach (System.Web.UI.Control c in control.Controls) 
        {
            // Get the Enabled property by reflection.
            Type type = c.GetType();
            PropertyInfo prop = type.GetProperty("Enabled");
    
            // Set it to False to disable the control.
            if (prop != null) 
            {
                prop.SetValue(c, false, null);
            }
    
            // Recurse into child controls.
            if (c.Controls.Count > 0) 
            {
                this.DisableControls(c);
            }
        }
    }
    

    VB:

        Private Sub DisableControls(control As System.Web.UI.Control)
    
            For Each c As System.Web.UI.Control In control.Controls
    
                ' Get the Enabled property by reflection.
                Dim type As Type = c.GetType
                Dim prop As PropertyInfo = type.GetProperty("Enabled")
    
                ' Set it to False to disable the control.
                If Not prop Is Nothing Then
                    prop.SetValue(c, False, Nothing)
                End If
    
                ' Recurse into child controls.
                If c.Controls.Count > 0 Then
                    Me.DisableControls(c)
                End If
    
            Next
    
        End Sub
    
    0 讨论(0)
  • 2020-12-14 08:56

    You have to do this recursive, I mean you have to disable child controls of controls to :

    protected void Page_Load(object sender, EventArgs e)
    {
      DisableChilds(this.Page);
    }
    
    private void DisableChilds(Control ctrl)
    {
       foreach (Control c in ctrl.Controls)
       {
          DisableChilds(c);
          if (c is DropDownList)
          {
               ((DropDownList)(c)).Enabled = false;
          }
        }
    }
    
    0 讨论(0)
  • 2020-12-14 08:58

    If you really want to disable all controls on a page, then the easiest way to do this is to set the form's Disabled property to true.

    ASPX:

    <body>
        <form id="form1" runat="server">
          ...
        </form>
    </body>
    

    Code-behind:

    protected void Page_Load(object sender, EventArgs e)
    {
        form1.Disabled = true;
    }
    

    But of course, this will also disable your checkbox, so you won't be able to click the checkbox to re-enable the controls.

    0 讨论(0)
  • 2020-12-14 09:04

    It would be easiest if you put all the controls you want to disable in a panel and then just enable/disable the panel.

    0 讨论(0)
提交回复
热议问题