如果存在,如何获取TagName of Control?

时间:2016-08-08 10:58:16

标签: html .net vb.net reflection asp.net-controls

我写了这段代码:

    If (AlohaEnabled) Then
        Dim head As Control = Nothing
        For Each control In Master.Controls
            Dim field = control.GetType.GetField("TagName")
            If ((field IsNot Nothing) AndAlso (field.GetValue(control).Equals("head"))) Then
                'Add aloha scripts
            End If
        Next
    End If

如果AlohaEnabledTrue,那么我打算在head标记中添加一些链接和脚本。我事先并不知道将使用哪种Master,因此我会迭代其Controls并通过反射查找名为TagName的字段。如果field有一个值,那么我将它与"head"进行比较,如果匹配,那么我打算添加aloha script(问题更为笼统,我可能需要这适用于不同的脚本或其他地方)。 TagNameSystem.Web.UI.HtmlControls.HtmlControl的字段。我的测试用例中的0' control返回

{Name = "HtmlHead" FullName = "System.Web.UI.HtmlControls.HtmlHead"}
<{1>} control.GetType。如果我们查看System.Web.UI.HtmlControls.HtmlHead,我们会看到它继承System.Web.UI.HtmlControls.HtmlGenericControl,而System.Web.UI.HtmlControls.HtmlContainerControl继承TagName,继承自HtmlControl。由于{{3}}为Public,我希望control.GetType.GetField("TagName")Return "head"。而不是那样,它返回Nothing。我想知道这种行为的原因是什么?

编辑:

FloatingKiwi 是对的,问题是我正在搜索一个字段,但这是一个属性,因此我没有找到它(无论如何,属性的目的是什么,我们可以解决它们任务与方法)。在此期间我使用了解决方法:

        For Each control In Master.Controls
            If (TypeOf control Is System.Web.UI.HtmlControls.HtmlControl) Then
                Dim htmlControl = CType(control, System.Web.UI.HtmlControls.HtmlControl)
                If (htmlControl.TagName.Equals("head")) Then
                    'Add aloha scripts
                End If
            End If
        Next

我想知道哪个是优秀的解决方案:我的解决方案,或使用反射搜索属性?

1 个答案:

答案 0 :(得分:1)

它是属性而不是字段。使用

而是{p> Dim result = propInfo .GetValue(control, Nothing)

这将返回一个PropertyInfo对象。要获得实际值,请使用

{{1}}