通过ASP:Buttons

时间:2018-10-03 12:49:40

标签: c# asp.net button aspbutton

我是新手,并且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:'对象引用未设置为对象的实例。'

1 个答案:

答案 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;
}