2013-08-18 3 views
0

Я использую Linq в сервере я заполняю мой список как этотКак добавить класс в C# (сервер) для ListView элемента Li

selected MenuId=3;  
ul_HeaderMenu.DataSource = data.TABLE_MENUS.ToList(); 
ul_HeaderMenu.DataBind(); 

этот код клиента

<asp:ListView ID="ul_HeaderMenu" runat="server" ClientIDMode="Static"> 
    <ItemTemplate > 
     <li class="li-HeaderMenu" runat="server" ><%# Eval("Name") %> 
      <div class="TopMenuActive"></div> 
     </li> 
    <ItemTemplate> 
</asp:ListView> 

Мне нужно добавить класс в ли я здание на сервере, некоторые думают вот так

selected MeduId=3;  
ul_HeaderMenu.DataSource = data.TABLE_MENUS.ToList(); 
ul_HeaderMenu.DataBind(); 
ul_HeaderMenu.ElementAt[3]AddClass('test'); 

Я просто нахожу способ добавить класс в ли.

ответ

1

Вы можете использовать ItemDataBound событие в списке

<asp:ListView OnItemDataBound="YourListView_ItemDataBound" ID="ul_HeaderMenu" runat="server" ClientIDMode="Static"> 
    <ItemTemplate > 
     <li ID="listItem" class="li-HeaderMenu" runat="server" ><%# Eval("Name") %> 
      <div class="TopMenuActive"></div> 
     </li> 
    <ItemTemplate> 
</asp:ListView> 

затем в коде позади, что-то вроде этого;

protected void YourListView_ItemDataBound(object sender, ListViewItemEventArgs e) 
{ 
    HtmlGenericControl myLi = (HtmlGenericControl)e.Item.FindControl("listItem"); 
    myLi.Attributes.Add("class", myLi.Attributes["class"].ToString() + " yournewclass"); 
} 
+0

Но как я делаю это с одним конкретным предметом, а не со всеми пунктами? –

+0

, который зависит от условия, внутри события привязки данных у вас есть доступ к индексу позиции; e.Item.DataItemIndex –

+0

Я нахожу его thanx –

0

ListView состоит из элементов, которые определены в разделе ItemTemplate, а не о элементах li. Поэтому, когда вы получаете элемент из списка ListView по индексу, вам сначала нужно найти li, прежде чем вы сможете добавить к нему класс. Следовательно, вам нужно использовать метод FindControl на предмет, чтобы получить ли.

Теперь здесь есть несколько вещей.

ListView не имеет метода ElementAt, его коллекция Items имеет его, но все же я бы использовал ul_HeaderMenu.Items[3], чтобы получить элемент по индексу.

Если вы хотите использовать метод FindControl, вам нужно добавить идентификатор к вашему li внутри вашего ItemTemplate, который вы перейдете в FindControl, чтобы получить ли.

AddControl метод не существует, вы должны использовать коллекцию Attributes на li, чтобы изменить атрибут класса. Здесь вам нужно быть осторожным, так как вы хотите, чтобы классы уже были там, поэтому вам придется конкатенировать строки, но вы не хотите добавлять один и тот же класс несколько раз, поэтому лучше всего, если вы создали вспомогательный метод AddClass, который берет строку и возвращает ее с добавленным классом.

Вы можете сделать все это в любой момент, но обычно вы хотите использовать событие ItemDataBound, как это описано Ларсом Анундскасом.

И, наконец, пока вы можете свободно использовать любое соглашение, которое вам нравится, лично я считаю, что ваше соглашение об обсадчике сбивает с толку - вы можете немного прочитать предложения Microsoft here.