[英]Find element by attribute in aspx
<div id="foo" runat="server" data-id="bar"></div>
在后面的代码中,可以直接在id上或使用FindControl()
访问此div。
但有没有办法根据另一个属性而不是id在aspx上搜索元素? 例如上面的data-id="bar"
。
此扩展方法(使用递归)可能会有所帮助:
public static IEnumerable<Control>
FindControlByAttribute(this Control control, string key)
{
var current = control as System.Web.UI.HtmlControls.HtmlControl;
if (current != null)
{
var k = current.Attributes[key];
if (k != null)
yield return current;
}
if (control.HasControls())
{
foreach (Control c in control.Controls)
{
foreach (Control item in c.FindControlByAttribute(key, value))
{
yield return item;
}
}
}
}
样品用法:
protected void Page_Load(object sender, EventArgs e)
{
var controls = this
.FindControlByAttribute("data-id")
.ToList();
}
如果您还想按值过滤:
public static IEnumerable<Control>
FindControlByAttribute(this Control control, string key, string value)
{
var current = control as System.Web.UI.HtmlControls.HtmlControl;
if (current != null)
{
var k = current.Attributes[key];
if (k != null && k == value)
yield return current;
}
if (control.HasControls())
{
foreach (Control c in control.Controls)
{
foreach (Control item in c.FindControlByAttribute(key, value))
{
yield return item;
}
}
}
}
你需要看看你在FindControl中迭代的控件的属性是什么,或者你是否直接访问元素:
this.foo
然后,您可以使用Attributes集合来查看指定的属性值。 http://msdn.microsoft.com/en-us/library/kkeesb2c(v=vs.100).aspx
但要回答你的问题 - 不,除非你使用FindControl()迭代容器/父控件,否则没有
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.