为什么我不能这样做
我有一个数据列表可以检索出一些数据。如果label1是我们说的123那么第二个label2必须是不可见的
Label Label1 = (Label)DataList2.FindControl("LabelName1");
Label Label2 = (Label)DataList2.FindControl("LabelName2");
if (Label1.Text == "123")
{
Label2.Visible = false;
}
当它转到(if1.Label1.Text ==“123”)时 它说 对象引用未设置为对象的实例。
答案 0 :(得分:1)
这取决于您在页面生命周期中的位置。 DataList使用ASP.NET模板来构建它的内部控件集合,直到您调用DataBind
时才会发生这种情况,这通常会在PreRender
之前自动发生。在创建控件集合之前,您无法在控件集合中找到控件。
你在页面生命周期中的哪个位置?背景是什么?还有其他一些事情可以使这一点进一步复杂化(一件事是FindControl不是递归的)因为它不一定会搜索每个命名容器。但我想知道更多关于在什么情况下这不起作用,因为它确实如此,但你需要小心。
这样的事情可以解决问题:
<asp:DataList runat="server" ID="DataList1" OnPreRender="DataList1_PreRender">...</asp:DataList>
然后编码:
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!";
}
答案 1 :(得分:0)
答案 2 :(得分:0)
你忘了提到你不能做的事情? 现在发生了什么?
也就像你在评论中提到的那样“LabelName”或“LabelName1” - 那些可能是'l'和'1'(很难发现)
答案 3 :(得分:0)
我会检查以确保“LabelName2”存在。你可能有一个错字。