2009-03-05 28 views
1

Bir hata ayıklama yaparken ben bir şey garip karşılaştığım şablonlardan birinde bir denetim bulma bir ViewView sahip yaşıyorum. Özyinelemeli bir FindControl Uzantısı uyguladım ve bir kimlik ile bir denetimin nerede arama yaptığımdan tamamen farklı olduğunu buldum. Uygulama esas olarak, ana kontrolde Findcontrol'ü çağırıyor ve daha sonra bulunan bir şey yoksa, çocuk kontrollerindeki özyinelemeyi çağırıyor.FindControl uygulanması

Ben reflektör ile asp.net koduna kazma başladı ve nasıl bir onay kutularının FindControl yöntemi uygulanması nerede (System.Web.UI.WebControls.CheckBoxList bir)

protected override Control FindControl(string id, int pathOffset) 
{ 
    return this; 
} 

Bu şimdi öğrendim Tüm bunlar, benim FindControl'imin neden bir CheckBoxList bulduğunu anlamış, ancak bu uygulamanın arkasında hiçbir akıl yürütme göremiyorum, beni aydınlatabilecek kimse var mı?

cevap

2

Bu FindControl uygulaması, yinelemeli bir yöntemi geçersiz kılar.

protected override Control FindControl(string id, int pathOffset) 
{ 
    return this; 
} 

geçersiz kılma mı:

protected virtual Control FindControl(string id, int pathOffset) 
{ 
    string str; 
    this.EnsureChildControls(); 
if (!this.flags[0x80]) 
{ 
    Control namingContainer = this.NamingContainer; 
if (namingContainer != null) 
{ 
    return namingContainer.FindControl(id, pathOffset); 
} 

Ben özyinelemeli yöntem mevcut denetim Aradığınız biridir olduğu bilinmektedir IE gerekli olmadığı hallerde kullanılacak spekülasyon olacaktır.

ekstra okuma MSDN

Control.FindControl arayışında yardımcı pathOffset parametresinde belirtilen belirtilen id ve bir tamsayı, bir sunucu kontrolü için geçerli adlandırma kabı arar. , FindControl yönteminin bu sürümünü geçersiz kılmamalısınız. kontrolü için tanımlayıcı bulunacak

kimliği.

pathOffset
kontroller kadar bir adlandırma konteyner ulaşmak için gerekli sayfa denetimi hiyerarşi sayısı.

link