ASP.NET: пользовательский элемент управления, который выводит несколько гиперссылок. Как мне зарегистрировать ClientID для AJAX (UpdatePanel)? - PullRequest
0 голосов
/ 01 сентября 2010

У меня есть пользовательский элемент управления, который отображается как гиперссылка:

Public Class TestControl
    Inherits System.Web.UI.WebControls.WebControl
    Implements IPostBackEventHandler

    Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
        Trace.WriteLine("Hyperlink 1 clicked")
    End Sub

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        writer.WriteLine("<a href=""{0}"" id=""{1}"">Hyperlink 1</a>", _
                         Page.ClientScript.GetPostBackClientHyperlink(Me, "Hyperlink 1"), _
                         Me.ClientID)
    End Sub
End Class

Это прекрасно работает.Он также хорошо работает, когда помещается в UpdatePanel: обновляется только панель UpdatePanel, полная обратная передача не выполняется.

Теперь я хотел бы вывести вторую гиперссылку в методе Render.Если я использую один и тот же идентификатор (Me.ClientID), все работает хорошо, но это, очевидно, приводит к некорректному HTML (никакие два элемента управления не могут иметь одинаковый атрибут id).Если я использую разные идентификаторы клиентов (например, Me.ClientID & "_1" и Me.ClientID & "_2"), при щелчке гиперссылок выполняется полная обратная передача.

Есть ли способ сообщить ASP.NET AJAX: " Всеобратные передачи следующих идентификаторов клиента должны выполняться асинхронно: ..."?

1 Ответ

1 голос
/ 01 сентября 2010

Я использую немного другой подход, который был UpdatePanel дружественным по моему опыту, который вы можете рассмотреть.

Вместо генерации HTML-содержимого непосредственно в методе Render() я наследую свой элемент управления от CompositeControl и заполняю его дочерними элементами управления в методе CreateChildControls(). После заполнения коллекции элементов управления метод рендеринга «заботится о себе сам».

Для панели обновлений этот составной элемент управления - это просто набор обычных серверных элементов управления, поэтому встроенное поведение «просто работает».

Если вы не слишком много работали с составными элементами управления, вот ресурс для начала . Я склонен создавать целое дерево управления, а не переопределять метод RenderControl(), но в любом случае это разумный ресурс.

...