我是新手,并且ASP:Button控件有问题。
页面上大约有60个按钮,典型的XAML如下所示:
<asp:Button class="tile" ID="Button1" runat="server" Text="Domains"/>
我需要遍历页面上的所有按钮以更改属性,并且我不想一个接一个地做。
我到处都发现了很多建议,但没有任何效果。我后面的代码是:
for (int i = 1; i < 59; i++)
{
String butt = String.Format("Button{0}", i);
var btn = FindControl(butt);
btn.Visible = false;
}
错误是没有对象引用。 btn为空。 我试图检查正在运行的应用程序中的元素,并说元素的ID为“ MainContent_Button1”-也尝试过,不起作用。我尝试过的另一件事是
foreach(var button in this.Controls.OfType<Button>())
{
button.Visible = false;
}
我得出的结论是,asp:button是a)不是按钮类型的控件b)它的ID是在运行应用程序时以某种方式生成的,因此找不到ID为Button1的控件。
有人可以向我解释吗?我真的很想了解为什么会这样,这种行为的目的到底是什么。
谢谢
编辑:我什至试图完全删除循环并使用FindControl方法修改一个特定的按钮。也不起作用。
var btn = FindControl("Button1");
btn.Visible = false;
结果:System.NullReferenceException:'对象引用未设置为对象的实例。'
答案 0 :(得分:3)
您似乎正在使用母版页。在母版页上使用FindControl与在普通页上使用稍有不同。首先需要找到按钮所在的正确ContentPlaceHolder
,然后在该ContentPlaceHolder上使用FindControl。
ContentPlaceHolder cph = Master.FindControl("MainContent") as ContentPlaceHolder;
for (int i = 1; i < 9; i++)
{
String butt = String.Format("Button{0}", i);
var btn = cph.FindControl(butt);
btn.Visible = false;
}