2010-11-19 26 views
1
Panel pnl_Confirmation = (Panel)form1.FindControl("ConfirmationPanel") as Panel; 
    pnl_Confirmation.Visible = false; 

Yukarıdaki kodda "NullReferenceException" almaya devam ediyorum. "ConfirmationPanel", formun başarıyla gönderilip gönderilmediğine bağlı olarak gösterdiğim/gizlediğim bir paneldir.Nullreference istisnası - neden?

<asp:LoginView ID="LoginView1" runat="server"> 
<LoggedInTemplate> 
<asp:Panel id="ConfirmationPanel" runat="server" Wrap="False"> 

...

Neden bu null:

paneli doğrudan "ConfirmationPanel" diyemezsin, o yüzden bir LoginView kontrolünde sarılır? Panelin "ConfirmationPanel" kimliğine başvurması gerekir, değil mi? O kod var nerede

Teşekkür

+2

oluşturmak 'Paneli pnl_Confirmation = (Panel) form1.FindControl Paneli'yle ("ConfirmationPanel");' Neden iki kez döküm var? – Gabe

+1

Bu, istediğiniz yorumun tür olmayabilir, ancak bunun yerine MVC ile çalışmak bir yolu var mı? ASP.NET web formları konsantre kötülüktür. – Juliet

+1

İki tür yazı tipine ihtiyacınız yoktur: "Panel olarak" yeterlidir. Eğer deyimi Panel olarak Paneli pnl_Confirmation = (Panel) form1.FindControl ("ConfirmationPanel") yürütüldüğünde – TreDubZedd

cevap

4

Bunu deneyin:

Panel pnl_Confirmation = LoginView1.FindControl("ConfirmationPanel") as Panel; 
if(pnl_Confirmation != null) 
    pnl_Confirmation.Visible = false; 
+0

Bu çalıştı. Teşekkürler! Ben iki defa döküm yanı sıra yerine "LoginView1" nin "form1" dan referans oldu görünüyor. – Kolten

+0

@Kolten - Yep. Lütfen sorununuzu çözdüyse, cevap olarak işaretleyin. – Gabe

2

Tüm bağlıdır. Page_Load() 'dan önce sahipseniz, denetim ağacı büyük olasılıkla henüz oluşturulmamıştır, dolayısıyla boş başvuru.

0

İki kez yazmayı denediğiniz görülüyor. Sadece iki kez typecast

deneyin en iyi şekilde çalışır:

Panel pnl_Confirmation = (Panel)form1.FindControl("ConfirmationPanel"); 

veya

Panel pnl_Confirmation = form1.FindControl("ConfirmationPanel") as Panel; 

Ayrıca önemli olan referans o

if (pnl_Confirmation != null) 
    pnl_Confirmation.Visible = false; 
erişmeyi denemeden önce boş olup olmadığını doğrulamak için
1

Kullanım ait FindControl LoginView yerine

Panel pnl_Confirmation = LoginView1.FindControl("ConfirmationPanel") as Panel; 

o LoginView şablonunun parçası olduğu için.

1

"FindControl denetimi doğrudan belirtilen kap içerdiği yalnızca bir denetimi bulacaksınız;. Bu yöntem kontrolleri dahilinde denetimlerin bir hiyerarşisi içinde arama yapmaz ise," (MSDN belgelerinden)

yani LoginView üzerinde FindControl arayabilir veya bir özyinelemeli FindControl

İlgili konular