웹 사용자 컨트롤을 사용하여 페이지 텍스트를 업데이트합니다

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

  •  02-07-2019
  •  | 
  •  

문제

페이지가 쿼리 문자열을 기반으로 동적으로 사용자 컨트롤 (X.ASCX)을로드하는 응용 프로그램을 구축하고 있습니다.

페이지에 유효성 검사 요약이 있으며 사용자 컨트롤에서 업데이트하려고합니다. 이를 통해 하나의 검증 요약을 사용하여 여러 컨트롤을 가질 수 있습니다. 컨트롤과 페이지간에 데이터를 전달하려면 어떻게해야합니까?

디자인 시간에 컨트롤을 정의하고 이벤트를 사용하여 이벤트를 사용할 수 있지만 이러한 컨트롤은 Page.LoadControl을 사용하여 동적으로로드됩니다.

또한 세션이나 쿼리 스트링 사용을 피하고 싶습니다.

도움이 되었습니까?

해결책

이 작업을 수행하는 방법을 찾았습니다.

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 단계 : 웹 사용자 컨트롤에서 STEP2에서 정의한 MyBase.FunctionName을 호출하십시오.

'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의 유효성 검사기 컨트롤에 대해 이야기하고 있다고 가정하면 유효성 검사 요약과 함께 작동하게하는 것이 쉬워야합니다. 동일한 검증 그룹을 사용하십시오. 일반적으로 Setter가 모든 내부 유효성 검사기를 동일한 유효성 검사 그룹으로 변경하는 재정의 메소드를 호출하는 ValidationGroup 속성을 추가하는 기본 클래스에서 모든 USERCONTROLS를 도출합니다.

까다로운 부분은 동적으로 추가 할 때 행동하게 만드는 것입니다. 주로 페이지주기와 관련하여 Page 객체에 추가 할 때 알아야 할 일부 gotchas가 있습니다. 설계 시간 동안 사용할 수있는 모든 사용자 컨트롤을 알고 있다면 EnableViewState를 사용하여 정적으로 추가하고 너무 많은 경우에도 오버 헤드를 최소화하기 위해 추가하려고합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top