У меня есть ListView на странице, которая отображает список виджетов. Когда пользователь нажимает на один из элементов в списке, я хочу отобразить ModalPopup , который содержит элементы управления, позволяющие пользователю работать с выбранным им элементом.
Я мог бы легко сделать это, поместив Panel и ModalPopupExtender в ItemTemplate ListView, но это означало бы один набор скрытых элементов управления для каждого виджета, который мог бы массово увеличить размер страницы. (Там будут некоторые довольно тяжелые элементы управления.) Вместо этого я хочу повторно использовать один ModalPopup для каждого из виджетов в списке.
Я провел некоторые поиски, но я не нашел ничего, что бы непосредственно относилось к моей ситуации. Однако из того, что я смог выяснить, я должен сделать что-то вроде этого:
- Поместите Panel и ModalPopupExtender на страницу внутри UpdatePanel.
- Создание пользовательского
WidgetManipulator
пользовательского элемента управления со свойством WidgetID
. Поместите это в Panel вместе с парой кнопок OK / Cancel.
- В Javascript на странице прикрепите обработчик кликов к каждому виджету в ListView, который запускает обратную передачу на UpdatePanel.
- В событии
UpdatePanel_Load
на сервере отобразите ModalPopup, а затем установите WidgetID
свойство на WidgetManipulator
в качестве идентификатора выбранного виджета.
- В событии
OKButton_Click
или CancelButton_Click
на сервере скрыть ModalPopup. Если нажата кнопка OK, сначала позвоните WidgetManipulator.SaveChanges()
.
Часть, которую я не понял, это: как, черт возьми, я узнаю, на какой виджет щелкнули, и как передать его обратно на сервер, когда я обновляю UpdatePanel? Это вообще правильный подход?