2009-07-20 3 views
0

목록 사용자 페이지를 제어하는 ​​페이지, 사용자 편집 페이지를 제어하는 ​​페이지, 사용자 추가 페이지를 제어하는 ​​페이지 등 세 가지 웹 컨트롤이있는 aspx 페이지가 있습니다. 이러한 요소에 액세스하는 방법을 발견했지만 제한적으로 보입니다. 여기에 내가 무엇을했는지 있습니다 :하위 ascx 페이지에서 상위 aspx 페이지의 웹 요소를 활성화/비활성화하는 방법은 무엇입니까?

Protected Sub editUser(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) 
     'set selected user from gridview. 
     Dim index As Integer = e.NewEditIndex 
     Dim userId As Integer = gvListUsers.DataKeys(index).Value 
     Session.Item("SelectedUserId") = userId 

     'show edit page, hide list and add page. 
     With Page.Form.Controls(1) 
      .Controls(getControlId("loadAddUser")).Visible = False 
      .Controls(getControlId("loadEditUser")).Visible = True 
      .Controls(getControlId("loadListUser")).Visible = False 
     End With 
    End Sub 

getControlId 기능은 다음과 같습니다

Public Function getControlId(ByVal control As String) As Integer 
     Dim enumer As System.Collections.IEnumerator = Page.Form.Controls.Item(1).Controls.GetEnumerator 
     Dim i As Integer 

     For i = 0 To (Page.Form.Controls.Item(1).Controls.Count - 1) 
      If Page.Form.Controls(1).Controls.Item(i).ID = control Then 
       Return i 
      End If 
     Next 
     Return Nothing 
    End Function 

이 대부분의 경우에 작동합니다. 그러나 이러한 웹 컨트롤의 "사용 가능"속성에 액세스 할 수 없습니다. 왜 그런가요? 그리고 그 속성에 어떻게 접근 할 수 있습니까?

감사합니다 :)

+0

을, 당신은 페이지의 객체에서 직접 사용할 수있는 방법을 사용할 수 있습니다) – awe

+0

이 방법에 대해 머리를 주셔서 감사합니다! – Chris

답변

1

당신은 부모 ASPX 페이지에 가입하여 된 UserControls에서 이벤트를 발생시킬 수있다. 부모 페이지 이벤트 조치에서 당신은, 당신의 컨트롤을 활성화/비활성화 할 수

여기에 추가 된 UserControls 이벤트의 예

: 당신이 된 UserControls에이 코드를 이동에서 어떤 혜택을 얻고있다 : 다른 http://codebetter.com/blogs/brendan.tompkins/archive/2004/10/06/Easily-Raise-Events-From-ASP.NET-ASCX-User-Controls.aspx

뭔가에 대해 생각하는가? 개별 통제 중 하나라도 스스로 재사용 할 수 있습니까? 서로에 의존하는 단단히 결합 된 컨트롤을 만드는 것은 개별 컨트롤의 재사용 성을 크게 저하시키지 않습니다.

+0

링크를 제공해 주셔서 감사합니다. 매우 흥미로운. 상위 페이지에 콘텐츠를 추가하고 컨트롤 사이에이 코드의 일부만 스왑 아웃 할 수 있도록 사용자 컨트롤을 사용하고 있습니다. – Chris

0

VisibleSystem.Web.UI.Control 클래스에서 제공하는 속성이므로 직접 액세스 할 수 있습니다. Enabled은이 클래스의 속성이 아니므로 Enabled 속성에 액세스하려면 컨트롤 개체를 사용자 지정 컨트롤 클래스 유형의 변수에 매핑해야합니다.

Dim myControl As TheAddUserControl 

With Page.Form.Controls(1)  
    myControl = .Controls(getControlId("loadAddUser")) 
    myControl.Enabled = False    
    .Controls(getControlId("loadEditUser")).Visible = True    
    .Controls(getControlId("loadListUser")).Visible = False   
End With 

당신의 사용자 제어 활성화 된 속성을 노출하기 : Page.FindControl ("loadAddUser"자신의 getControlId을 만드는 대신

Public Property Enabled As Boolean 
    Get 
     Return (Child1.Enabled And Child2.Enabled And Child3.Enabled) 
    End Get 
    Set(ByVal value As Boolean) 
     Child1.Enabled = value 
     Child2.Enabled = value 
     Child3.Enabled = value 
    End Set 
End Poperty 
+0

TheAddUserControl이 어떤 유형인지 알 수 없습니다. System.Web.UI.Control 유형이 아니겠습니까? 그게 내 인상이야. – Chris

+0

사용자 정의 컨트롤에 클래스 이름이 있습니다. 이것은 유형입니다. 사용자 정의 컨트롤에 Enabled 속성을 추가 했습니까? 사용자 정의 컨트롤 (또는이 클래스가 상속 한 클래스)이 Enabled에 대한 속성을 노출하지 않으면 해당 속성이 없습니다. 속성에 대한 속성을 노출하고 사용자 정의 컨트롤의 자식 요소에있는 사용 가능 속성에 매핑해야합니다. – awe

관련 문제