如何从子ascx页面启用/禁用父aspx页面的Web元素?

时间:2009-07-20 12:27:56

标签: asp.net vb.net .net-2.0

我有一个包含三个Web控件的aspx页面:一个用于控制List Users页面,一个用于控制Edit Users页面,另一个用于控制Add User页面。我发现了一种访问这些元素的方法,但似乎有限。这就是我所做的:

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控件的“已启用”属性。为什么会这样,我该如何访问该属性?

谢谢:)

2 个答案:

答案 0 :(得分:1)

您可以从您在父ASPX页面中订阅的UserControl中引发事件。在父页面事件操作中,您可以启用/禁用控件,

以下是UserControls中的事件示例:http://codebetter.com/blogs/brendan.tompkins/archive/2004/10/06/Easily-Raise-Events-From-ASP.NET-ASCX-User-Controls.aspx

需要考虑的其他事项:将这些代码移动到用户控件中,您是否获益?任何一个控件都可以自行重复使用吗?创建依赖于彼此存在的紧密耦合控件并不能为您提供单独控件的可重用性。

答案 1 :(得分: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

在您的用户控件中公开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