Доступ к элементу управления внутри LayoutTemplate объекта ListView - PullRequest
24 голосов
/ 12 января 2009

Как получить доступ к элементу управления в LayoutTemplate элемента управления ListView?

Мне нужно добраться до litControlTitle и установить его атрибут Text.

<asp:ListView ID="lv" runat="server">
  <LayoutTemplate>
    <asp:Literal ID="litControlTitle" runat="server" />
    <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
  </LayoutTemplate>
  <ItemTemplate>
  </ItemTemplate>
</asp:ListView>

Есть мысли? Возможно через событие OnLayoutCreated?

Ответы [ 5 ]

35 голосов
/ 12 января 2009

Попробуйте это:

((Literal)lv.FindControl("litControlTitle")).Text = "Your text";
17 голосов
/ 20 мая 2010

Полное решение:

<asp:ListView ID="lv" OnLayoutCreated="OnLayoutCreated" runat="server">
  <LayoutTemplate>
    <asp:Literal ID="lt_Title" runat="server" />
    <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
  </LayoutTemplate>
  <ItemTemplate>
  </ItemTemplate>
</asp:ListView>

В коде позади:

protected void OnLayoutCreated(object sender, EventArgs e)
{
    (lv.FindControl("lt_Title") as Literal).Text = "Your text";
}
4 голосов
/ 21 февраля 2012

Этот метод работает для макета шаблона; используйте событие init элемента управления:

<asp:ListView ID="lv" runat="server" OnDataBound="lv_DataBound">
  <LayoutTemplate>
    <asp:Literal ID="litControlTitle" runat="server" OnInit="litControlTitle_Init" />
    <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
  </LayoutTemplate>
  <ItemTemplate>
  </ItemTemplate>
</asp:ListView>

И захватить ссылку на элемент управления для использования в выделенном фрагменте кода (например, в событии DataBound элемента ListView:

private Literal litControlTitle;

protected void litControlTitle_Init(object sender, EventArgs e)
{
    litControlTitle = (Literal) sender;
}

protected void lv_DataBound(object sender, EventArgs e)
{
    litControlTitle.Text = "Title...";
}
0 голосов
/ 20 октября 2018

Если вам нужна версия VB, то здесь

Dim litControl = CType(lv.FindControl("litControlTitle"), Literal)
litControl.Text = "your text"
0 голосов
/ 04 сентября 2013

для вложенной петли LV:

void lvSecondLevel_LayoutCreated(object sender, EventArgs e)
{
    Literal litText = lvFirstLevel.FindControl("lvSecondLevel").FindControl("litText") as Literal;
    litMainMenuText.Text = "This is test";
}
...