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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 25 сентября 2008

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

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

Шаг 2. Создайте функцию Public в базовом пользовательском элементе управления, чтобы вызывать события, определенные в шаге 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.FunctionName, которое вы определили в Шаге 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
0 голосов
/ 25 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...