Как прочитать идентификатор родительского элемента управления при загрузке страницы пользовательского элемента управления, независимо от страниц?

1

У меня есть общий элемент управления пользователя, скажем, TextBoxUserControl.ascx, который используется на трех разных страницах, например, A.aspx, B.aspx и C.aspx.

У A.aspx есть скрытый контроль, скажем, hiddenA
B.aspx имеет скрытый контроль, скажем, hiddenB
C.aspx имеет скрытый контроль, скажем, hiddenCxyz

Я хочу прочитать скрытое значение родительской страницы из TextBoxUserControl.ascx, когда TextBoxUserControl.ascx загружается с разных страниц.
Но проблема, с которой я столкнулась, заключается в том, как явно не указывать имя скрытых полей в Page_Load из TextBoxUserControl.ascx? Как разделить между ними?

Ниже приведен метод Page_Load для TextBoxUserControl.ascx

Private Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

    ' below hiddenA of A.aspx is explicitly being checked, but it wont work if this user control
    ' is used in B.aspx and C.aspx as they have different names of hidden fields
    Control ctr = Me.Parent.FindControl(hiddenA)
    labelTotal = ctr.Text
End Sub
  • 1
    Страница является контроллером, а не пользовательским, почему UC нужно читать со страницы? Страница должна предоставлять UC необходимую информацию через свойства или методы.
  • 0
    Как упоминалось выше, мне нужно прочитать идентификатор определенного скрытого поля с другой страницы в ситуации, когда у меня есть много скрытых полей на странице. В скрытом поле, которое я пытаюсь прочитать из UC, есть pageNameGUID этой страницы, который мне нужно указать для метода перенаправления пользовательских страниц, созданного в пользовательской среде приложения, которую я использую ...
Теги:

1 ответ

1
Лучший ответ

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

Например:

Public Interface IPageHost
   ReadOnly Property PageNameGuid As String
End Interface

Затем реализуйте этот интерфейс в a.aspx:

Public Class APage
    Inherits System.Web.UI.Page
    Implements IPageGuidHost

    Public ReadOnly Property PageNameGuid As String Implements IPageGuidHost.PageNameGuid
        Get
            Return hiddenA.Text
        End Get
    End Property

и, наконец, в пользовательском элементе управления, если родительская страница реализует интерфейс, просто получите значение напрямую:

Private Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    Dim parentPage As IPageGuidHost

    parentPage = TryCast(Me.Page, IPageGuidHost)
    If parentPage IsNot Nothing Then
        labelTotal.Text = parentPage.PageNameGuid
    Else
        lableTotal.Text = String.Empty
    End If
End Sub
  • 0
    Большое спасибо !! Это очень полезно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню