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

Ich halte eine "Nullreferenceexception" in dem obigen Code zu bekommen. "ConfirmationPanel" ist ein Panel, das ich ein-/ausblenden kann, je nachdem, ob das Formular erfolgreich gesendet wurde oder nicht.Nullreferenz Ausnahme - warum?

Die Platte wird in einem Loginview-Steuerelement gewickelt, weshalb ich nicht "ConfirmationPanel" direkt anrufen:

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

...

Warum ist das null

? Es sollte das Panel mit der ID "ConfirmationPanel" referenzieren, nein?

Dank

+2

'Panel-pnl_Confirmation = (Panel) form1.FindControl ("ConfirmationPanel") als Gremium schaffen,' Warum werfen Sie zweimal? – Gabe

+1

Dies mag nicht die Art von Kommentar sein, den Sie wollen, aber gibt es eine Möglichkeit, mit MVC zu arbeiten? ASP.NET Webforms ist konzentriert böse. – Juliet

+1

Sie benötigen nicht beide Arten von Typumwandlungen: "als Panel" ist ausreichend. – TreDubZedd

Antwort

4

Versuchen Sie dies:

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

Das hat funktioniert. Vielen Dank! Es scheint, dass ich zweimal getaucht habe, sowie von "form1" anstatt von "LoginView1" referenziert habe. – Kolten

+0

@Kolten - Ja. Bitte markieren Sie dies als die Antwort, wenn es Ihr Problem gelöst hat. – Gabe

2

Es hängt alles davon, wo Sie diesen Code haben. Wenn Sie es vor Page_Load() haben, ist die Kontrollstruktur wahrscheinlich noch nicht gebaut, daher die Nullreferenz.

0

Es scheint, Sie versuchen, zweimal tippen.

Versuchen Sie nur einmal typisieren mit entweder am besten funktioniert:

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

oder

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

Es ist auch wichtig, um zu überprüfen, ob Ihre Referenz, bevor Sie versuchen nicht null ist, darauf zuzugreifen

if (pnl_Confirmation != null) 
    pnl_Confirmation.Visible = false; 
1

Verwenden Sie die Findcontrol von Loginview statt

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

Da es Teil der Loginview-Vorlage ist.

1

„Findcontrol eine Kontrolle nur finden, wenn die Steuerung direkt von den angegebenen Behältern enthalten ist;. Das heißt, das Verfahren nicht überall in einer Hierarchie von Kontrollen innerhalb der Kontrollen suchen“ (aus der Dokumentation MSDN)

dh Findcontrol auf Loginview-Anruf oder eine rekursive Findcontrol

Verwandte Themen