我在下面给出的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] 删除。
我来说两句