2009-07-20 39 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 
相关问题