Findcontrol в шаблоне элемента списка

У меня есть следующий код в itemtemplate:

 <asp:ListView ID="ListView1" runat="server">
            <ItemTemplate>

  <asp:HiddenField Value='<%# checkCatName(Eval("CatName")) %>' runat="server" />
           ........
   <asp:Label runat="server" id="lblBla" Visible="false"> ... </asp:Label>

      </ItemTemplate>
</asp:ListView>

Код позади (С#):

public void checkCatName(object CatName)
{
    Label bla = (Label)ListView1.FindControl("lblBla");


    if (CatName.ToString() == "test1")
        bla.Visible = true;


    return CatName.ToString();

}

Я получаю null - как будто страница не находит метку "bla".

Где я не прав?


person Oshrib    schedule 08.02.2012    source источник


Ответы (2)


чтобы получить элемент, который находится в списке или повторителе, вам нужно будет просмотреть элементы в этом представлении, а затем найти элемент управления (скрытое поле).

Страница не сможет найти этот элемент управления напрямую.

Надеюсь, это поможет.

person Sebastian Siek    schedule 08.02.2012

Если в списке есть событие itemdatabound, вы можете использовать его, чтобы найти элемент управления и сделать с ним все, что вам нужно. Следующий код предполагает, что у вас есть скрытое поле в шаблоне элемента списка с id="myhiddenfield"

//this goes inside your listview's itemdatabound event
HiddenField myhiddenfield = new HiddenField();
myhiddenfield = (HiddenField)e.Item.FindControl("myhiddenfield");

//get or set hidden field value here.
int myID = Convert.ToInt32(myhiddenfield.Value);
person Jeff Turner    schedule 08.02.2012
comment
вот еще образец. msdn.microsoft.com/en- мы/библиотека/ - person Jeff Turner; 08.02.2012