在C#中按自定义属性名称获取复选框控件

4

我有一个包含40-50个复选框的集合,并且我已经为每个复选框设置了一个名为"attr-ID"的属性,其值是数据库中的唯一ID。我怎样才能在C#代码中通过属性名称获取控件? 在页面加载事件上,我希望根据数据库的值勾选一些复选框。

 <input type="checkbox" id="rdCervical" attr-ID='111' runat='server' />

1
它们是否具有runat =“server”属性,还是简单的HTML元素? - Tomislav Markovski
HTML5允许以data-开头的属性,但对于其他任何内容,我想您必须自己编写解析器,恐怕无能为力。 - Bala R
是的,它们有 runat server,但我无法在 C# 中识别控件 ID。 - deepu
如果它们有 "runat="= server",则应该在代码后端中可用。它们可能位于自定义控件中吗?您能发布一些容器的更多代码吗? - Tomislav Markovski
这是一个普通的HTML控件,但我有许多复选框,并且在服务器端识别每个复选框ID必须检查每个ID和属性值,这是我不需要的。因此,如果有一些方法可以检查属性并将其选中,则可以避免这种情况。 - deepu
@deepu 刚好看到这个问题,你选择了什么答案? - crthompson
2个回答

6

Is this what you want?

protected void Page_Load(object sender, EventArgs e)
{
    var cb = FindControlByAttribute<HtmlInputCheckBox>(this.Page, "attr-ID", "111");

}
public T FindControlByAttribute<T>(Control ctl, string attributeName, string attributeValue) where T : HtmlControl
{
    foreach (Control c in ctl.Controls)
    {
        if (c.GetType() == typeof(T) && ((T)c).Attributes[attributeName]==attributeValue)
        {
            return (T) c;
        }
        var cb= FindControlByAttribute<T>(c, attributeName, attributeValue);
        if (cb != null)
            return cb;
    }
    return null;
}

他没有使用服务器控件,而是使用HTML控件HtmlInputCheckBox - Tomislav Markovski
@Arion:你能在你的函数中指定一个区域吗?就像我有一个包含50个复选框的div,它的id是'dvCheckboxes'。我使用了你的函数,但总是得到null值。感谢您的帖子...请帮忙。 - deepu
1
@deepu:此函数循环页面上的所有控件。如果有一个带有属性attr-ID且其值为111的控件,则会返回它。如果您有一个带有复选框的div,请确保它具有runat="server"属性。然后您可以在此函数中使用该控件,并且它将返回复选框。 - Arion

5
if (rdCervical.Attributes["attr-ID"] != null)
{
      string id = rdCervical.Attributes["attr-ID"];
      rdCervical.Checked = true;
}

我猜您是通过编程添加复选框。在这种情况下,请创建一个容器<div id="checkContainer" runat="server"></div>,并将所有复选框放在其中。然后只需使用checkContainer.InnerHtml并使用该库解析该代码。然后,您可以轻松使用库API按属性查找元素,我认为方法是SelectNodes
没有这个库,没有简单的方法从代码中导航HTML元素。

复选框的 ID 无法被选中,因为我有很多个复选框,我使用了一个共同的属性来识别需要被选中的复选框。 - deepu
我假设您是以编程方式添加复选框。在这种情况下,创建一个容器 <div id="checkContainer" runat="server"></div> 并将所有复选框放在其中。然后只需使用 checkContainer.InnerHtml 并使用此库解析该代码。然后,您可以轻松地使用该库的API通过属性查找元素。http://htmlagilitypack.codeplex.com/ - Tomislav Markovski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接