обновите текст страницы с помощью веб-пользовательского элемента управления

StackOverflow https://stackoverflow.com/questions/130561

  •  02-07-2019
  •  | 
  •  

Вопрос

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

У меня есть сводка проверки на странице, и я хочу обновить ее с помощью пользовательских элементов управления.Это позволит мне иметь несколько элементов управления, использующих одну сводку проверки.Как я могу передавать данные между элементами управления и страницами?

Я знаю, что могу определить элемент управления во время разработки и использовать события для этого, но эти элементы управления загружаются динамически с помощью Page.Управление нагрузкой.

Кроме того, я хочу избежать использования sessions или querystring .

Это было полезно?

Решение

Нашел способ сделать это:

Шаг 1:Создайте базовый пользовательский элемент управления и определите делегаты и события в этом элементе управления.

Шаг 2:Создайте общедоступную функцию в базовом пользовательском элементе управления для вызова событий, определенных на шаге 1.

'SourceCode for Step 1 and Step 2
Public Delegate Sub UpdatePageHeaderHandler(ByVal PageHeading As String)
Public Class CommonUserControl
    Inherits System.Web.UI.UserControl

    Public Event UpdatePageHeaderEvent As UpdatePageHeaderHandler
    Public Sub UpdatePageHeader(ByVal PageHeadinga As String)
        RaiseEvent UpdatePageHeaderEvent(PageHeadinga)
    End Sub
End Class

Шаг 3:Унаследуйте свой веб-пользовательский элемент управления от базового пользовательского элемента управления, который вы создали на шаге 1.

Шаг 4:Из вашего веб-пользовательского элемента управления - вызовите MyBase.Имя функции, которое вы определили на шаге 2.

'SourceCode for Step 3 and Step 4
Partial Class DerievedUserControl
    Inherits CommonUserControl

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        MyBase.PageHeader("Test Header")
    End Sub
End Class

Шаг 5:На вашей странице загрузите элемент управления динамически с помощью Page .LoadControl и используйте элемент управления в качестве базового пользовательского элемента управления.

Шаг 6:Прикрепите обработчики событий к этому элементу управления.

'SourceCode for Step 5 and Step 6
Private Sub LoadDynamicControl()
    Try
        'Try to load control
        Dim c As CommonUserControl = CType(LoadControl("/Common/Controls/Test.ascx", CommonUserControl))
        'Attach Event Handlers to the LoadedControl
        AddHandler c.UpdatePageHeaderEvent, AddressOf PageHeaders
        DynamicControlPlaceHolder.Controls.Add(c)
    Catch ex As Exception
        'Log Error
    End Try
End Sub

Другие советы

Предполагая, что вы говорите об элементах управления валидатора asp, заставить их работать со сводкой проверки должно быть легко:используйте ту же группу проверки.Обычно я получаю все usercontrols из базового класса, который добавляет свойство ValidationGroup, установщик которого вызывает переопределенный метод, который изменяет все внутренние средства проверки на одну и ту же группу проверки.

Самое сложное - заставить их вести себя при динамическом добавлении.Есть некоторые подводные камни, о которых вы должны знать, в основном касающиеся цикла страницы и когда вы добавляете их в свой объект Страницы.Если вам известны все возможные пользовательские элементы управления, которые вы будете использовать во время разработки, я бы попытался добавить их статически, используя EnableViewState и Visible, чтобы минимизировать накладные расходы, даже если их слишком много.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top