我有一个包含三个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控件的“已启用”属性。为什么会这样,我该如何访问该属性?
谢谢:)
答案 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)
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