Я написал этот код:Как получить TagName элемента управления, если существует?
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
Если AlohaEnabled
является True
, то я намерен добавить некоторые ссылки и скрипты для head
тега. Я не знаю заранее, какой тип Master
будет использован, поэтому я повторяю его Controls
и ищите поле под названием TagName
через отражение. Если field
имеет значение, то я сравниваю его с "head"
, и если это совпадение, то я намерен добавить aloha script
s (вопрос более общий, хотя мне это может понадобиться для разных скриптов, а также где-то еще). TagName
- область System.Web.UI.HtmlControls.HtmlControl. в моем тестовом случае 0'th control
возвращает
{Name = "HtmlHead" FullName = "System.Web.UI.HtmlControls.HtmlHead"}
на control.GetType
. Если посмотреть на System.Web.UI.HtmlControls.HtmlHead, мы увидим, что он наследует System.Web.UI.HtmlControls.HtmlGenericControl, который на свой черед наследует System.Web.UI.HtmlControls.HtmlContainerControl, который наследует от HtmlControl
. Поскольку TagName является Public
, я ожидал бы control.GetType.GetField("TagName")
до Return
"head"
. Вместо этого он возвращает Nothing
. Интересно, в чем причина такого поведения?
EDIT:
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
Интересно, это лучшее решение: моя работа вокруг, или свойство поиска с помощью отражения?
Я заметил, что этот вопрос вниз проголосовали. Если кто-то может объяснить проблему с вопросом, я могу отредактировать ее, чтобы улучшить ее качество или удалить ее, если она невосприимчива. –