C# findcontrol问题

C# findcontrol问题,c#,label,findcontrol,C#,Label,Findcontrol,为什么我不能这样做 我有一个数据列表,可以检索一些数据。如果标签1是我们说的123,那么第二个标签2必须是不可见的 Label Label1 = (Label)DataList2.FindControl("LabelName1"); Label Label2 = (Label)DataList2.FindControl("LabelName2"); if (Label1.Text == "123") { Label2.Visible = fals

为什么我不能这样做

我有一个数据列表,可以检索一些数据。如果标签1是我们说的123,那么第二个标签2必须是不可见的

    Label Label1 = (Label)DataList2.FindControl("LabelName1");
    Label Label2 = (Label)DataList2.FindControl("LabelName2");

    if (Label1.Text == "123")
    {
        Label2.Visible = false;
    }
当它连接到
if(Label1.Text==“123”)
上面说
对象引用未设置为对象的实例。

编辑:同时提及您无法执行的操作以及您遇到的错误,以获得更好的答案。。。
您不想使用“Label”(因为Label是一个关键字/类)作为第一个的名称。将其命名为Label1或其他名称…并使用String.Compare()来比较字符串…

您忘了提到您不能做的事情了吗? 现在发生了什么


还有,是您在评论中提到的“LabelName”还是“LabelName1”-这些可能会混淆“l”和“1”(难以识别)

我会检查以确保“LabelName2”存在。您可能有打字错误。

这取决于您在页面生命周期中的位置。DataList使用ASP.NET模板构建其内部控制集合,在调用
DataBind
之前不会发生这种情况,这通常在
PreRender
之前自动发生。在创建控件之前,无法在控件集合中找到控件

在页面生命周期中,您在哪里执行此操作?背景是什么?还有其他一些事情可能会使这更复杂(一件事是FindControl不是递归的),因为它不一定会搜索每个命名容器。但我想知道在什么情况下这不起作用,因为它确实起作用,但你需要小心

编辑: 像这样的事情应该可以做到:

<asp:DataList runat="server" ID="DataList1" OnPreRender="DataList1_PreRender">...</asp:DataList>

您应该能够…在哪个事件方法中运行此操作?我将更改
标签
变量的名称,因为它与
标签
类型相同。称之为
Label1
或其他更有意义的名称。我在这里使用的名称只是示例项目模板或页眉/页脚模板中的这两个标签?年份我知道标签是一个关键字只是在问题中有一个小错误,我已经修复了现在如何使用字符串。比较?这可能是因为找不到您的label..我猜Label1中有null…尝试在单击事件或某个按钮上执行此操作…似乎在页面加载中您可能没有访问权限…并再次检查名称是否为'LabelName1'。。。String.Compare(C#)-它与if(Label1.Text==“123”)一起失败,所以不可能是这样,让我们检查了很多次,但感谢您的回复。当页面加载时应该在页面加载中执行此操作。这可能是个问题,请尝试连接PreRender事件,看看它是否会更改内容。这些控件是通过实例化模板创建的,模板通常推迟到稍后的时间,即预渲染。确保你连接了正确的PreRender事件,最好是DataList的事件。你只是c#的初学者,那么我该怎么做呢?谢谢你的回复,但我的结论是FindControl甚至找不到labelPost。我们需要进一步研究整个源代码。现在,我将开始转储视觉控件树,并在页面生命周期的不同点检查不同的控件,因为我知道没有简单的方法告诉您在哪里查找。
protected void DataList1_PreRender(object sender, EventArgs e)
{
    // the sender in this case is the DataList1 control
    // i often prefer to rely on the sender argument
    Label label1 = (Label)((Control)sender).FindControl("Label1");
    label1.Text = "Yay, it looks like this works!";
}