div在服务器端使用C#中的div类在服务器端可见false

吉滕德拉·库马尔(Jitendra Kumar)

我在下面给出的aspx页面中有一个div。我有一个页面,其中包含桌面和移动代码以及样式。我想根据情况显示show hide div。使用id(页面上超过50 div)会增加代码和id,使用“桌面”和“移动”上方提供的类会减少代码。

<div class="desktop" runat="server">
            <p>this desktop version1</p>
        </div>
        <div class="Mobile" runat="server">
            <p>this mobile version1</p>
        </div>
        <div class="desktop" runat="server">
            <p>this desktop version1</p>
        </div>
        <div class="Mobile" runat="server">
            <p>this mobile version1</p>
        </div>
        <div class="desktop" runat="server">
            <p>this desktop version1</p>
        </div>
        <div class="Mobile" runat="server">
            <p>this mobile version1</p>
        </div>
        <div class="desktop" runat="server">
            <p>this desktop version1</p>
        </div>

我想在服务器端使用div类(而非div ID)显示hide div。

protected void Page_Load(object sender, EventArgs e)
    {

    }

最后,我找到了解决方案,如果对此有任何疑问,请答复。

 protected void Page_Load(object sender, EventArgs e)
    {
   string theClass;
   theClass = "desktop";
        var theControls = FindByClass(theClass);
        foreach (Control item in theControls)
        {
            //do something;
            if (item is WebControl)
            {
                ((WebControl)item).Visible = false;
            }
            else
            {
               ((HtmlControl)item).Visible = false;
            }
        }

    }

    private IEnumerable FindByClass(string theClass)
    {
        Control[] allControls = FlattenHierachy(Page);


        var theControls = from n in allControls
                          where ((n is WebControl)
                          && ((WebControl)n).CssClass.Contains(theClass))
                          || (n is HtmlControl
                              && ((HtmlControl)n).Attributes.Count > 0
                              && ((HtmlControl)n).Attributes["class"] != null
                              && ((HtmlControl)n).Attributes["class"].IndexOf(theClass) > -1)
                          select n;
        return theControls;
    }

    public static Control[] FlattenHierachy(Control root)
    {
        List<Control> list = new List<Control>();
        list.Add(root);
        if (root.HasControls())
        {
            foreach (Control control in root.Controls)
            {
                list.AddRange(FlattenHierachy(control));
            }
        }
        return list.ToArray();
    }
尤里尔

如评论中所述,在您的情况下使用媒体需求会更好。

但是,让我们继续回答您的问题,而忽略其原因。您可以递归找到所有控件,然后将它们隐藏:

    private IEnumerable<HtmlGenericControl> FindControls(ControlCollection controls, string className)
    {
        foreach (Control control in controls)
        {
            var c = control as HtmlGenericControl;
            if (c != null)
            {
                var classAttribute = c.Attributes["class"];
                if (classAttribute != null)
                    if (classAttribute.Equals(className))
                        yield return c;
            }
            if (control.HasControls())
                foreach (var subControl in FindControls(control.Controls, className))
                    yield return subControl;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        var a = FindControls(Page.Controls, "Mobile").ToList();
        a.ForEach(p=>p.Visible = false);
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章