c# - 在后面的代码中隐藏 div 元素

标签 c# html css asp.net

我制作了一个幻灯片。每张幻灯片的顶部都有一个 div。 div 包含一些文本。我想要做的是,如果 h2p 元素没有文本,那么隐藏包含它们的 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; }

不幸的是,这没有效果。

我也试过改线

slideDiv.Style.Add("显示", "无");

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

但还是一样

最佳答案

首先,您不需要在 rptSlides_ItemDataBound 事件中使用 foreach 循环,因为转发器控件的 ItemDataBound 事件会为每个元素迭代.下一个 Div 不是 HtmlGenericControl 控件,而是 HtmlControl 控件。一旦你有了这个,你就可以使用 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;
       }
   }
}

请包括 using System.Text.RegularExpressions; 以导入 Regex 类。

关于c# - 在后面的代码中隐藏 div 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33127001/

相关文章:

css - 使用背景图像的图像梯度比它上面的图像高

javascript - 如何制作基本的所见即所得编辑器?

c# - 无法从文件夹中获取文件

c# - 复选框值始终为空,即使我选中它

c# - 将 C++ 移植到 C#

python - 使用 Beautiful soup 访问没有类 ID 的 <li> 元素

html - 渐变未出现在页 footer 分

c# - 为什么 KeyEvent 中的数字小键盘数字和常规数字不一样?

html - SVG <clipPath> 适合容器并使用 % 单位

html - 如何垂直居中显示 : flex 的无序列表