如何从用户控件获取父页中包含的按钮的ID

本文关键字:包含 按钮 ID 用户 控件 获取 | 更新日期: 2023-09-27 18:22:36

我在一个有按钮的页面中包含了一个用户控件。

我想使用FindControl()查看该按钮是否存在于父页面中,但该按钮没有ID。

我已经尝试了以下代码:

Page.Master.FindControl("ButtonName/Text on button here?")

有什么办法我能做到这一点吗?

如何从用户控件获取父页中包含的按钮的ID

我想使用FindControl()来查看父级中是否存在该按钮页面,但按钮没有ID。

您将无法使用FindControl找到它,因为这需要元素具有ID,并且此按钮是服务器控件(即在标记中设置runat="server")

在这样的场景中,您唯一能做的就是使用客户端脚本来查找元素,使用纯javascript或jQuery。

如果它是动态创建的?你怎么知道身份证是什么?

如果按钮是动态创建的,那么你应该手动为它分配一个ID。

示例:

protected void Page_Load(object sender, EventArgs e)
{
    Button btnFound = (Button)this.FindControl("myButton");
    if (btnFound != null)
    {
        Response.Write("Found It!");
    }
}
protected void Page_Init(object sender, EventArgs e)
{
    Button btn = new Button()
    {
        ID = "myButton",
        Text = "Click Me"
    };
    this.Controls.Add(btn);
}

祝你好运!

假设你谈论的是asp:Button,如果你想按文本搜索,你可以进行递归查找。

母版页:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head runat="server">
     <title></title>
 </head>
 <body>
     <form runat="server">
     <div>
         <asp:Button runat="server" ID="btnTest" Text="Test Button" />
             <asp:ContentPlaceHolder ID="MainContent" runat="server"/>
     </form>
 </body>
 </html>

和一个狙击手的代码做递归查找

    protected List<Control> FindButton(ControlCollection controls, string buttonText)
    {
       List<Control> foundControls = (from c in controls.Cast<Control>() where c is Button && ((Button)c).Text == "Test Button" select c).ToList();
       if (foundControls.Count > 0)
           return foundControls;
       else
       {
           foreach (Control ctrl in controls)
           {
               if (foundControls.Count == 0)
                   foundControls = FindButton(ctrl.Controls, buttonText);
               if (foundControls.Count > 0)
                break;
           }
           return foundControls;
       }
    }

然后使用:

        List<Control> buttons = FindButton(Page.Master.Controls, "Test Button");
        if (buttons.Count > 0)
        {
            ((Button)buttons[0]).Text = "I found it";
        }

该代码可以通过多种方式进行修改,比如不在找到任何按钮后停止,而是继续循环查找所有按钮。它也可以更改为只找到一个按钮并返回它,而不是控件列表。您也可以修改查询以查找不同类型的控件。