2014-12-02 2 views
0

Html 요소에 aspx의 요소 뒤에 코드에서 사용자 지정 특성 이름을 액세스 할 수 있는지 궁금합니다. 마찬가지로사용자 지정 속성 별 요소 액세스

HtmlElement[] allElements = Page.FindElementByCustomName("custom-name"); 

과 두 개의 a 요소

<a runat="server" custom-name = "any">Faf</a> 
<a runat="server" custom-name = "any">Amla</a> 

인가, 즉 것

<a runat="server" custom-name = "any">Faf</a> 
<a runat="server">AB</a> 
<a runat="server" custom-name = "any">Amla</a> 

allElements 아래로 내 영문은 가정 나에게 그런 속성을 가진 모든 요소의 배열을 줄 것이다 가능한거야?

+1

이 나쁜 것은 아니지만 당신이 당신의 아내 구타 나 좌절을 가지고있어 같은 코멘트없이 투표를 아래로 소리 : P – Imad

답변

2

페이지의 모든 컨트롤을 반복 할 수 있지만 재귀 적으로 수행해야합니다. 예를 들어 Page.Controls로 시작한 다음 각 컨트롤에 대해 Controls 컬렉션을 반복합니다. 컨트롤에서 속성을 가져 오려면 IAttributeAccessor를 구현해야합니다. 반복에서 컨트롤이이 인터페이스를 구현하는지 확인할 수 있습니다. 마크 업에 사용자 정의 속성을 삽입 할 때 필요한 인터페이스입니다. 예를 들어, WebControl은이를 구현합니다. 지금 사용자 지정 특성을 추가하려고하면 해당 이름의 속성이 없다는 ASP.NET의 실패가 나타납니다. 같은 뭔가 :

public static void ListControls(ControlCollection controls, List<Control> controlsFound) 
{ 
    foreach (var control in controls.OfType<Control>()) 
    { 
     if (control is IAttributeAccessor) 
     { 
      controlsFound.Add(control); 
      ListControls(control.Controls, controlsFound); 
     } 
    } 
} 

당신이 당신의 페이지에서 호출해야합니다 : 결국

var controlsFound = new List<Control>(); 
ListControls(this.Controls, controlsFound); 

, 당신이 알고 controlsFound, 반복은은 IAttributeAccessor의 수집 및 속성의 속성 이름을 검색 할 수 있습니다 : 투표 아래

var attr = (control as IAttributeAccessor).GetAttribute("attribute-name"); 
+0

foundControls와 controlsFound는 동일합니까? – Imad

+1

예, 죄송합니다. 고쳐 줘서 고마워. 설명이 필요하면 알려주세요. –

+0

뭐야, 제발? 지금 시도해보십시오. –