2009-07-20 68 views
0

我有一個帶有三個Web控件的aspx頁面:一個控制List Users頁面,一個控制Edit Users頁面,一個控制Add User頁面。我發現了一種訪問這些元素的方法,但似乎是有限的。這是我做了什麼:如何從子ascx頁面啓用/禁用父aspx頁面的web元素?

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 

這在大多數情況下。但是,我無法訪問這些Web控件的「已啓用」屬性。爲什麼會這樣,我該如何訪問該屬性?

謝謝:)

+0

創建自己的getControlId的,你可以使用可用直接在頁面對象的一個​​方法: Page.FindControl(「loadAddUser」 ) – awe 2009-07-20 13:15:42

+0

非常感謝這個方法! – Chris 2009-07-20 13:31:11

回答

1

你可以提高您的用戶控件,你父ASPX頁面訂閱事件。在父頁面事件的行動,你可以啓用/禁用的控制,

這裏是事件的用戶控件的例子:http://codebetter.com/blogs/brendan.tompkins/archive/2004/10/06/Easily-Raise-Events-From-ASP.NET-ASCX-User-Controls.aspx

別的事情要考慮一下:你得到移動這個代碼到用戶控件什麼好處?任何個人控制是否可以自行重新使用?創建彼此依賴的緊密耦合的控件並不能爲您提供單獨控件的多重可用性。

+0

感謝您的鏈接。很有意思。我正在使用用戶控件,因此我可以將內容添加到父頁面,並在控件之間換出一段代碼。 – Chris 2009-07-20 13:23:01

0

Visible是由System.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 

要在你的公開Enabled屬性的用戶控件:除了

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