2015-10-14 2 views
0

Я создал слайд-шоу. Каждый из слайдов имеет div, размещенный над ним. В div содержится текст. Я хочу сделать, если элемент h2 и p не имеет текста, а затем спрятать div, который содержит их. Я попытался скрыть div от события повторителей DataBound, но он все еще показывает div над слайдом.скрывающий элемент div в коде за

Вот что я до сих пор:

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> 

код позади:

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");     
     } 
    } 
} 

Дополнительную информацию

Я также попытался следующие:

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"; 
     } 
    } 

Я создал класс в CSS под названием emptySlideText, например, так:

.emptySlideText { 
display:none; } 

Unfortunatley это не имело никакого эффекта.

Я также попытался изменить линию

slideDiv.Style.Add ("Дисплей", "ни один");

в

slideDiv.Attributes.Add ("стиль", "дисплей: нет");

Но опять же это не имеет никакого значения

ответ

2

Прежде всего вам не нужен foreach цикла внутри rptSlides_ItemDataBound события, как ItemDataBound случае управления повторителем итерации для каждого элемента. Следующий Div не является HtmlGenericControl контроля, а это HtmlControl контроля. После того как вы это вы можете скрыть DIV с помощью Visible свойство как это: -

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; 
     } 
    } 
} 

using System.Text.RegularExpressions; Пожалуйста, включите импортировать Regex класс.

+0

Он по-прежнему показывает div, когда h2 и p пусты. –

+0

@M_Griffiths - Хорошо, можете ли вы рассказать мне, какие значения вы передаете в 'slideTitle' и' slideDesc'? Я протестировал этот код, передав '' '' '' '' '', и он работает отлично для меня. –

+0

он извлекает текст из базы данных, но не каждый слайд имеет текст для отображения, поскольку db допускает null в этих столбцах. Я не уверен, как привязка данных работает с нулевым значением. –

Смежные вопросы