проблемы с управлением контентом - PullRequest
0 голосов
/ 10 июня 2010

почему я не могу сделать это

У меня есть список данных, который извлекает некоторые данные.если label1 равен 123, то второй label2 должен быть невидимым

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

    if (Label1.Text == "123")
    {
        Label2.Visible = false;
    }

, когда он становится равным
if (Label1.Text == "123")
говорит, что ссылка на объект не установленак экземпляру объекта.

Ответы [ 4 ]

1 голос
/ 11 июня 2010

Это зависит от того, где вы находитесь на жизненном цикле страницы. DataList использует шаблоны ASP.NET для создания своей коллекции внутреннего контроля, этого не произойдет, пока вы не вызовете DataBind, что обычно происходит автоматически перед PreRender. И вы не можете найти элементы управления в коллекции элементов управления, пока они не будут созданы.

Где на жизненном цикле страницы вы это делаете? Какой контекст? Есть и другие вещи, которые могут еще больше усложнить это (одна вещь - FindControl не является рекурсивной) в том, что он не обязательно будет искать в каждом контейнере именования. Но я хотел бы узнать больше о том, в каком контексте это не работает, потому что это работает, но вы должны быть осторожны.

EDIT:

Что-то вроде этого должно сработать:

<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!";
}
0 голосов
/ 10 июня 2010

Вы забыли упомянуть, что вы не можете сделать? что происходит с ним сейчас?

Кроме того, это "LabelName" или "LabelName1", как вы упомянули в комментарии - они могут быть «l» и «1» (трудно определить)

0 голосов
/ 11 июня 2010

Я бы проверил, чтобы "LabelName2" существовал.У вас может быть опечатка.

0 голосов
/ 10 июня 2010

РЕДАКТИРОВАТЬ: Также укажите, что вы не можете сделать и какую ошибку вы получите, чтобы получить лучший ответ ... Вы не хотите использовать 'Label' (поскольку Label является ключевым словом / классом) в качестве имени первого ... назовите его Label1 или что-то ... и используйте String.Compare () для сравнения строк ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...