2016-08-08 5 views
-1

는 나는이 코드를 작성했습니다 : True입니다컨트롤의 태그 이름을 얻는 방법 (존재하는 경우)?

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 경우, 나는 head 태그에 몇 가지 링크 및 스크립트를 추가 할 계획입니다. 어떤 종류의 Master이 사용될 지 미리 알지 못하기 때문에 Controls을 반복하고 TagName이라는 필드를 리플렉션을 통해 찾습니다. field에 값이있는 경우 "head"과 비교하고 일치하면 aloha script을 추가 할 예정입니다. 질문은 더 일반적이지만 다른 스크립트 나 다른 곳에도이 스크립트가 필요합니다. TagNameSystem.Web.UI.HtmlControls.HtmlControl의 필드입니다. 내 테스트 케이스의 0'th controlcontrol.GetType

{Name = "HtmlHead" FullName = "System.Web.UI.HtmlControls.HtmlHead"} 

를 반환합니다. System.Web.UI.HtmlControls.HtmlHead을 보면 System.Web.UI.HtmlControls.HtmlGenericControl을 상속받으며, 차례로 System.Web.UI.HtmlControls.HtmlContainerControl을 상속받으며 이는 HtmlControl에서 상속받습니다. TagNamePublic이므로, 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 

나는 우수한 솔루션입니다 궁금하다 : 내 해결 방법 또는 재산 반사를 사용하여 검색 하시나요?

+0

실제 값이 사용 얻으려면. 누군가 질문에 대한 설명을 해줄 수 있다면, 품질을 향상 시키거나 그것을 해결할 수 없으면 그것을 수정할 수 있습니다. –

답변

1

속성이 아닌 필드입니다. 대신

Dim propInfo = control.GetType.GetProperty("TagName")을 사용하십시오.

그러면 PropertyInfo 개체가 반환됩니다. 나는 질문이 아래로 선정 된 것을 관찰

Dim result = propInfo .GetValue(control, Nothing)

+0

control.GetType.GetProperty ("TagName"). GetValue (control, Nothing)는 문제를 실제로 해결하지만 if (TypeOf 컨트롤이 System.Web.UI.HtmlControls.HtmlControl 인 경우) 그런 다음 Dim htmlControl = CType (control, System.Web .UI.HtmlControls.HtmlControl)도 잘 작동합니다. 어떤 코드가 우수한지, 내 질문에 대한 실제 답변 또는 대신 구현 된 해결 방법이 궁금합니다. –

+0

편집 된 질문을 살펴보십시오. 보시다시피 해결 방법을 구현하고 표시 한 솔루션보다 더 좋든 나쁘 것인지 궁금해 할 것입니다 (질문에 대한 답변 임). –

+1

리플렉션을 사용하는 대신 강력한 형식의 접근 방식을 사용하는 것이 항상 좋습니다. – FloatingKiwi

관련 문제