обновите текст страницы с помощью веб-пользовательского элемента управления
-
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, чтобы минимизировать накладные расходы, даже если их слишком много.