【问题标题】:How to get HtmlGenericControl by string in C#如何在 C# 中通过字符串获取 HtmlGenericControl
【发布时间】:2017-08-04 10:56:18
【问题描述】:

在给定 li 标签的 id 的情况下,我想在代码后面的 li 标签中添加一个 css 类。

<li id="liOne" runat="server" class=""></li>

这是我的 C# 代码:

System.Web.UI.HtmlControls.HtmlGenericControl ctrl = Page.FindControl("liOne") as System.Web.UI.HtmlControls.HtmlGenericControl;
if(ctrl!=null)
  ctrl.Attributes["class"] += " active";

我已经尝试了上述方法,但它返回 null。有没有不需要遍历所有页面控件来获取 li 标签的方法?谢谢。

【问题讨论】:

    标签: c# asp.net webforms ascx findcontrol


    【解决方案1】:

    您正在查看的控件li 不会位于页面的顶层,因为它将是ul 的子级。 FindControl 位于顶层。你应该打电话给 liOne 的直系父母 FindControl

    您已经拥有带有 li 的 id 并且已经设置了 runat="server" 属性,因此您应该能够直接访问它而不使用 FindControl

    liOne.Attributes["class"] += " active";
    

    Page.FindControl

    FindControl 方法可用于访问 ID 不是 在设计时可用。该方法只搜索页面的 直接或顶级容器;它不会递归搜索 页面上包含的命名容器中的控件。访问 子命名容器中的控件,调用 FindControl 该容器的方法。

    编辑基于cmets,有很多li控件

    您可以分配具有诸如 li1、li2、li3 之类的序列的 id,并通过它们的父级来评估它们。

    for(int i=1; i < 4; i++)
    {
       System.Web.UI.HtmlControls.HtmlGenericControl ctrl = ul1.FindControl("li" + i) as System.Web.UI.HtmlControls.HtmlGenericControl;
       //Do what you want with ctrl
    }
    

    【讨论】:

    • 由于我在ul标签中有几个li控件,所以我想让它更动态而不是直接访问它,谢谢。
    • 感谢您的回答,我已经制作了ul runat服务器,以便可以在后面的代码中找到具体的li控件。
    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    相关资源
    最近更新 更多