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

私は上記のコードで "NullReferenceException"を取得し続けます。 「ConfirmationPanel」は、フォームが正常に送信されたかどうかによって表示/非表示を切り替えるパネルです。Nullリファレンス例外 - なぜですか?

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

...

なぜこのヌルは次のとおりです。

パネルは、私が直接「ConfirmationPanel」を呼び出すことができない理由これは、LoginViewコントロールに包まれていますか? ID「ConfirmationPanel」を持つPanelを参照する必要がありますか?

ありがとうございました

+2

を作成 'パネルpnl_Confirmation =(パネル)form1.FindControlパネルとして( "ConfirmationPanel");'なぜあなたは二回キャストしていますか? – Gabe

+1

これはあなたがしたいコメントのようなものではないかもしれませんが、代わりにMVCで作業できる方法はありますか? ASP.NET webformsは集中的な悪です。 – Juliet

+1

タイプキャストの両方のタイプは必要ありません。「パネルとして」で十分です。 – TreDubZedd

答えて

4

試用:

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

これは機能しました。ありがとう!私は2回見ているようですが、 "LoginView1"ではなく "form1"から参照しています。 – Kolten

+0

@Kolten - うん。問題を解決した場合は、これを答えとして記入してください。 – Gabe

2

これはコードの所在地によって異なります。 Page_Load()の前にそれを持っていれば、コントロールツリーはまだ構築されていない可能性があります。

0

2回タイプキャストしようとしたようです。

のみのいずれかで一回型キャスト最高の作品にしてみてください。

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

または

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

あなたの参照はそれを

if (pnl_Confirmation != null) 
    pnl_Confirmation.Visible = false; 
にアクセスしようとする前に、nullでないかどうかを確認することも重要です
1

それはLoginViewテンプレートの一部なので代わりに

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

LoginViewのにFindControlを使用してください。

1

「コントロールを直接指定したコンテナに含まれている場合のみにFindControlはコントロールを見つけます;つまり、この方法は、コントロール内のコントロールの階層全体検索しません」(MSDNのドキュメントから)

すなわちLoginView上にFindControlを呼び出したり、再帰的にFindControl

関連する問題