M_Griffiths
M_Griffiths

Reputation: 581

hiding div element in code behind

I have built a slideshow. Each of the slides has a div placed over the top of it. The div contains some text. What I want to do is if the h2 and p element have no text then hide the div that contains them. I have attempted to hide the div from the repeaters DataBound event but it is still showing the div over the slide.

Here's what I have so far:

aspx:

<asp:Repeater ID="rptSlides" runat="server" ClientIDMode="Static" OnItemDataBound="rptSlides_ItemDataBound">
    <ItemTemplate>
        <div runat="server" id="slideDiv" class="slide">
            <img runat="server" src='<%# Eval("slideImgPath")%>' />
            <div id="slideTextdiv" runat="server" class="slideText">
                <h2 id="titlePlaceHolder" runat="server" class="slideTitle text-center text-capitalize h2 ">
                    <%# Eval("slideTitle") %>
                </h2>
                <p id="textPlaceHolder" runat="server" class="slideDes">
                    <%# Eval("slideDesc") %>
                </p>
            </div>
        </div>
    </ItemTemplate>
</asp:Repeater>

Code behind:

 protected void rptSlides_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    foreach (RepeaterItem item in rptSlides.Items)
    {
        HtmlGenericControl titleText = (HtmlGenericControl)item.FindControl("titlePlaceHolder");
        HtmlGenericControl slidetextDesc = (HtmlGenericControl)item.FindControl("textPlaceHolder");
        HtmlGenericControl slideDiv = (HtmlGenericControl)item.FindControl("slideTextdiv");

        if (titleText.InnerText == "" && slidetextDesc.InnerText == "")
        {
            slideDiv.Style.Add("Display", "none");                
        }
    }
}

Further info

I have also tried the following:

foreach (RepeaterItem item in rptSlides.Items)
    {
        HtmlGenericControl slideDiv = (HtmlGenericControl)FindControlRecursive(item, "slideTextdiv");
        HtmlGenericControl titleText = (HtmlGenericControl)FindControlRecursive(item, "titlePlaceHolder");
        HtmlGenericControl slidetextDesc = (HtmlGenericControl)FindControlRecursive(item, "textPlaceHolder");


        if (string.IsNullOrWhiteSpace(titleText.InnerText) && string.IsNullOrWhiteSpace(slidetextDesc.InnerText))
        {
            slideDiv.Attributes["class"] = "emptySlideText";
        }
    }

I created a class in the css called emptySlideText, like so:

.emptySlideText {
display:none; }

Unfortunatley this has had no effect.

I have also tried changing the line

slideDiv.Style.Add("Display", "none");

to

slideDiv.Attributes.Add("style", "display:none");

But again it made no difference

Upvotes: 0

Views: 3642

Answers (1)

Rahul Singh
Rahul Singh

Reputation: 21825

First of all you don't need a foreach loop inside your rptSlides_ItemDataBound event as ItemDataBound event of a repeater control iterates for each item. Next Div is not a HtmlGenericControl control rather it is HtmlControl control. Once you have this you can hide the div using Visible property like this:-

protected void rptSlides_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
   if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
   {
       HtmlControl slideTextdiv = (HtmlControl)e.Item.FindControl("slideTextdiv");
       HtmlGenericControl titlePlaceHolder = (HtmlGenericControl)e.Item.FindControl("titlePlaceHolder");
       HtmlGenericControl textPlaceHolder = (HtmlGenericControl)e.Item.FindControl("textPlaceHolder");

       if (titlePlaceHolder != null)
               titlePlaceHolder.InnerText = Regex.Replace(titlePlaceHolder.InnerText, @"\r\n?|\n", "").Trim();

       if (textPlaceHolder != null)
               textPlaceHolder.InnerText = Regex.Replace(textPlaceHolder.InnerText, @"\r\n?|\n", "").Trim();

       if (String.IsNullOrEmpty(titlePlaceHolder.InnerText) && String.IsNullOrEmpty(textPlaceHolder.InnerText))
       {
           slideTextdiv.Visible = false;
       }
   }
}

Please include using System.Text.RegularExpressions; to import Regex class.

Upvotes: 2

Related Questions