循环访问 ASP:Buttons

iterate through ASP:Buttons

提问人:FilllanTroop 提问时间:10/3/2018 最后编辑:FilllanTroop 更新时间:10/3/2018 访问量:293

问:

我是新手,我对 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 为 null。 我试图检查正在运行的应用程序中的元素,它说元素的 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;

result: System.NullReferenceException: '对象引用未设置为对象的实例。

C# asp.net 按钮 aspButton

评论

0赞 beefoak 10/3/2018
尝试在 for 循环之外声明 var btn,并仅在内部修改它。
0赞 FilllanTroop 10/3/2018
谢谢你的回答,beefoak。我刚刚尝试过,我什至完全删除了循环,只留下这个 var btn = FindControl(“Button1”);BTN的。可见 = 假;并出现相同的错误:System.NullReferenceException:“对象引用未设置为对象的实例。 所有按钮都在容器和行中(不确定它是否可以以某种方式相关)

答:

3赞 VDWWD 10/3/2018 #1

您似乎正在使用母版页。在母版页上使用 FindControl 的工作方式与在普通页面上略有不同。首先需要找到 Button 所在的正确位置,并在该 ContentPlaceHolder 上使用 FindControl。ContentPlaceHolder

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

评论

1赞 FilllanTroop 10/3/2018
你是天才!!谢谢!呜......(几个小时后)我能问你为什么吗?这是否意味着页面和母版页在编译时是合并的,并且每个页面实际上是母版页,只是内部内容不同?我要把你的答案打印出来,贴在墙上,这样就不会被遗忘了。PS:我的声誉很低,所以我的点击点赞是不可见的。
0赞 VDWWD 10/3/2018
母版页与 UserControl 基本相同。这就是为什么它在页面之后加载的原因。然后,将 Master 的内容和使用 Master 的 Page 合并以输出到客户端。
0赞 FilllanTroop 10/3/2018
理解。谢谢你的解释。对不起,新手问题。当我的高级同事决定离开时,我才开始学习 C#,然后......我现在只是一个人在这里:-)有好的一天。