[英]hiding div element in code behind
I have built a slideshow. 我已经建立了幻灯片。 Each of the slides has a div placed over the top of it.
每张幻灯片的顶部都有一个div。 The div contains some text.
div包含一些文本。 What I want to do is if the
h2
and p
element have no text then hide the div that contains them. 我想做的是如果
h2
和p
元素没有文本,然后隐藏包含它们的div。 I have attempted to hide the div from the repeaters DataBound event but it is still showing the div over the slide. 我试图从转发器DataBound事件中隐藏div,但仍在幻灯片上显示div。
Here's what I have so far: 这是我到目前为止的内容:
aspx: 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: 我在css中创建了一个名为emptySlideText的类,如下所示:
.emptySlideText {
display:none; }
Unfortunatley this has had no effect. 不幸的是,这没有任何效果。
I have also tried changing the line 我也试过换线
slideDiv.Style.Add("Display", "none"); slideDiv.Style.Add(“ Display”,“ none”);
to 至
slideDiv.Attributes.Add("style", "display:none"); slideDiv.Attributes.Add(“ style”,“ display:none”);
But again it made no difference 但同样没有影响
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. 首先,您不需要在
rptSlides_ItemDataBound
事件内进行foreach
循环,因为重复控件的ItemDataBound
事件会针对每个项目进行迭代。 Next Div
is not a HtmlGenericControl
control rather it is HtmlControl
control. Next
Div
不是HtmlGenericControl
控件,而是HtmlControl
控件。 Once you have this you can hide the div using Visible
property like this:- 一旦有了这个,您可以使用
Visible
属性隐藏div,如下所示:-
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;
请包括
using System.Text.RegularExpressions;
to import Regex
class. 导入正则
Regex
类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.