How to Change div Visibility from a User Control using c#

10,521

Solution 1

Since the controls exist in the page, and not the control, you have to find them in the page:

this.Page.FindControl("cartStatusTrue").Visible = varCartStatus;
this.Page.FindControl("cartStatusFalse").Visible = !varCartStatus;

Or similarly, if they were in a parent control:

this.Parent.FindControl("cartStatusTrue").Visible = varCartStatus;
this.Parent.FindControl("cartStatusFalse").Visible = !varCartStatus;

Of course, also make sure your divs both have runat="server" and ID="cartStatusTrue" or ID="cartStatusFalse".

Edit: Another option that is probably a design improvement would be to move the job of hiding the div to the aspx page. You could expose varCartStatus as a property of the control and read that property from the aspx page. In your aspx.cs:

this.cartStatusTrue.Visible = this.CartControl.CartStatus;
this.cartStatusFalse.Visible = !this.CartControl.CartStatus;

Solution 2

You can use something like:

   this.Parent.FindControl("cartStatusTrue").Visible = true; 
   this.Parent.FindControl("cartStatusFalse").Visible = false;

This is because, the "div" exists in the "Parent" (i.e. Page) of this user control.

Hope this helps!!

Solution 3

Hi As mentioned by gilly3, it should be fine. You might as well use Attributes.Add("style", "visibility:hiddden") if you want the div to be generated but not to display.

Share:
10,521
ComfortablyNumb
Author by

ComfortablyNumb

Trying to learn c# (desperately!) so I'm sorry for asking dumb questions!

Updated on June 15, 2022

Comments

  • ComfortablyNumb
    ComfortablyNumb almost 2 years

    I have got myself really tied up with a web user control and the changing of a <div>'s visibility in the parent ASPX.

    I have a shopping cart which is inside a User Control and within one of the pages the UC is included there is a status <div> which shows a summary of the cart contents. If the cart is empty it shows a different <div>.

    Code in UC

    if (varCartStatus)
    {
      cartStatusTrue.Visible = true;
      cartStatusFalse.Visible = false;
    else
    {
      cartStatusTrue.Visible = false;
      cartStatusFalse.Visible = true;
    }
    

    All I get at the moment is 'cartStatusTrue' does not exist in the current context. 'cartStatusFalse' does not exist in the current context.

    How do I get the UC to change the visibility of the <div> that's in the parent ASPX?

    Sorry, I very new to .net and C# and I'm totally lost (again!)