Работа с C # ASP.NET ListView, не удается вернуть DisplayIndex

#c# #javascript #asp.net #listview

#c# #javascript #asp.net #listview

Вопрос:

Во время моего исследования я нашел несколько решений моей проблемы (описано ниже), но, к сожалению, эти решения не будут работать для веб-сайтов, поскольку все они ориентированы на WinForms.

Мне нужно получить DisplayIndex элемента ListViewItem при наведении курсора мыши. Я не хочу делать такие вещи, как добавление индекса при рендеринге страницы с помощью пользовательского атрибута html, такого как 'index="0"' , а затем использовать это в моей __doPostBack() функции.

У меня есть updatepanel и a listview внутри всего этого в абсолютном div, когда мышь находится над меткой, расположенной в другом listview элементе, я хотел бы иметь возможность обновлять updatepane l данными, относящимися к элементу, на который наведен указатель мыши. Вся идея, стоящая за этим, заключается в том, что я хочу использовать один контейнер div и скрывать / показывать его для каждого mouseover из listview элементов.

Итак, в принципе, при наведении курсора мыши, скажем, на метку с ID = «hi» внутри listviewitem внутри listview id = «lv», я хочу получить этот идентификатор listviewitem для обновления другого listview внутри другой updatepanel.

Я не уверен, что все это сбивает с толку, но просто получение DisplayIndex зависшего listviewitem значения и использование его в __doPostBack функции решит мою проблему.

Спасибо, что уделили мне время!

Комментарии:

1. Почему вы произвольно отвергаете хорошие решения, такие как использование пользовательского атрибута html index=# ?

2. считается ли это хорошей практикой для этого? Я нахожу это немного запутанным. Я уверен, что есть другой способ сделать это :/

3. Конечно, если он выполнит свою работу 🙂 Я не вижу в этом никакой проблемы. Если вы действительно хотели избежать пользовательского атрибута, то вы могли бы использовать встроенный атрибут like name или добавить скрытый элемент input or span с вашими пользовательскими данными к каждой строке / элементу данных.

4. Я думаю, что наличие HiddenField не так уж плохо.

Ответ №1:

Вы можете добавить кнопку за надписью, установить CommandName="Select" на эту кнопку и скрыть ее с помощью display:none стиля. В обработчике событий ItemDataBound в ListView вы можете добавить атрибут onmouseover в label для запуска этих нажатий на кнопки и обработки события SelectedIndexChanging в ListView, где вы, естественно, можете получить индекс выбранного элемента.

разметка:

 <ItemTemplate>
     <li>
          <asp:Label runat="server" ID="Label1" Text='<%# Container.DataItem.ToString() %>' />
          <asp:Button runat="server" ID="SelectButton" CommandName="Select" style="display:none;" />
     </li>
</ItemTemplate>
  

Код:

 void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    var label = e.Item.FindControl("Label1") as Label;
    if (label != null)
    {
        var selectButton = e.Item.FindControl("SelectButton") as Button;
        label.Attributes["onmouseover"] = ClientScript.GetPostBackEventReference(selectButton, "");
    }
}
  

Комментарии:

1. Круто, я собираюсь принять это, поскольку это выполняет свою работу. Спасибо