设置基于通用List的aspx控件的属性

时间:2013-07-05 22:23:34

标签: asp.net

我得到一个aspx页面中所有控件的通用列表。我要对该列表的每个元素进行的操作是为这些aspx控件的属性Visible和Enabled设置一个值。

我不知道如何从通用列表的每个元素中获取TYPE。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim controlList As New List(Of Control)
        controlList = AddControls(Page.Controls, controlList)
        For Each ctl As Control In controlList
            Response.Write(ctl.ID & "<br/>")

            'Here I setup property Enabled of control textbox1
            CType(Me.FindControl("textbox1"), TextBox).Enabled = True

            'I'd like to setup property Enabled of control ctl.ID, but how to invoke <type of ctl>
            CType(Me.FindControl(ctl.ID), <type of ctl> ).Enabled = True

        Next
    End Sub

    Private Function AddControls(ByVal page As ControlCollection, ByVal controlList As List(Of Control)) As List(Of Control)
        For Each c As Control In page
            If c.ID IsNot Nothing Then
                controlList.Add(c)
            End If

            If c.HasControls() Then
                AddControls(c.Controls, controlList)
            End If
        Next
        Return controlList
    End Function

编辑1:

如果我尝试:

For Each ctl As Control In controlList
            Response.Write(ctl.ID & "<br/>")

            CType(Me.FindControl(ctl.ID), **ctl.GetType()** ).Enabled = True

Next

我收到错误:输入'ctl.GetType'未定义。

如果我尝试:

For Each ctl As Control In controlList
            Response.Write(ctl.ID & "<br/>")

            CType(Me.FindControl(ctl.ID), **WebControl** ).Enabled = True

Next

我收到错误:无法将对象类型'System.Web.UI.HtmlControls.HtmlForm'转换为'System.Web.UI.WebControls.WebControl'

编辑2:

如果我尝试:

For Each ctl As Control In controlList
            Response.Write(ctl.ID & "<br/>")

            CType(ctl, WebControl).Enabled = False

Next

我收到错误:无法将对象类型'System.Web.UI.HtmlControls.HtmlForm'转换为'System.Web.UI.WebControls.WebControl'

我不知道我在这里缺少什么。

2 个答案:

答案 0 :(得分:0)

你不应该像控件(或WebControl)一样都有.Visible和.Enabled,而不是使用List&lt; Control&gt;使用List&lt; WebControl&gt;。

然而,在回答您的实际问题时,您可以调用object.GetType()来返回类型,然后您可以使用反射来获取类型名称。

答案 1 :(得分:0)

我不确定我到底知道你在问什么,但是因为你在ASP.NET中这样做我猜你所有的控件都属于System.Web.UI.WebControls,所以你是否尝试过转换为通用WebControl

CType(ctl, WebControl).Enabled = True

您网页的所有UI元素都应该从WebControl继承,该.Enabled具有.Visible.GetType()属性。

如果您只想针对特定类型执行此操作,例如,您希望遍历每个控件但只想禁用文本框并使按钮不可见,则可以使用If ctl.GetType(ctl) = GetType(TextBox) Then CType(ctl, WebControl).Enabled = False ElseIf ctl.GetType(ctl) = GetType(Button) Then CType(ctl, WebControl).Visible = False End If 来查找类型:< / p>

{{1}}