如何从用户控件获取父页中包含的按钮的ID
本文关键字:包含 按钮 ID 用户 控件 获取 | 更新日期: 2023-09-27 18:22:36
我在一个有按钮的页面中包含了一个用户控件。
我想使用FindControl()查看该按钮是否存在于父页面中,但该按钮没有ID。
我已经尝试了以下代码:
Page.Master.FindControl("ButtonName/Text on button here?")
有什么办法我能做到这一点吗?
我想使用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";
}
该代码可以通过多种方式进行修改,比如不在找到任何按钮后停止,而是继续循环查找所有按钮。它也可以更改为只找到一个按钮并返回它,而不是控件列表。您也可以修改查询以查找不同类型的控件。