質問

asp.net にマスター ページを使用する Web サイトがあります。このマスター ページには、コンテンツ ページのすべてのコンテンツを含む 1 つのビューと、すべてのコンテンツ ページからのエラー メッセージを表示するマスター ページへのローカル コンテンツを含む 1 つのビューを持つマルチビュー コントロールがあります。

このエラー ビューには、エラー メッセージを表示する asp.net Label コントロールがあります。通常、ラベルは正常に機能しますが、まれにラベルが null になり、NullReferenceException がレンダリングされる場合があります。現在、ラベルを使用する前にラベルが null かどうかを確認することでこのケースに対処しましたが、それでも私の質問は次のとおりです。

このラベルが null なのはなぜですか?これを引き起こす可能性のある状況は何ですか?

編集: マスター ページには、文字列を取得してラベルを設定する SetErrorText というメソッドがあります。このメソッドをコンテンツ ページの Page_Load メソッドから呼び出していますが、これは通常は正常に機能します。(私がこれまでに発見した) 2 つのケースを除くすべてのケースでラベルは初期化されており、これら 2 つのケースと機能するすべてのケースを区別するものは何もありません。

また、ラベルを格納する View コントロールなど、マスター ページ内の他のすべてのコントロールも初期化されます。

コンテンツ ページの Page_Load がロールアラウンドすると、マスター ページにデータが読み込まれる必要があります。

役に立ちましたか?

解決

問題はずさんさの1つだったようです。マスター ページに ContentPlaceHolder コントロールがあるすべてのコンテンツ ページに Visual Studio が投入する自動生成された Content コントロールを、誰かが削除するのを忘れていました。

コンテンツ ページに Content コントロールがある場合、マスター ページの ContentPlaceHolder コントロールに配置されているコントロールはすべて null になるようです。

他のヒント

マスターページのどのメソッドからラベルにアクセスしていますか?ページのライフサイクルの段階によっては、ラベル コントロールがまだ読み込まれていない可能性があります。

作成前にアクセスしている可能性はありますか?ページのライフサイクルを確認します。 http://msdn.microsoft.com/en-us/library/ms178472.aspx

非常によく似たエラーがありました。私の場合、コントロール デザイナー ファイルに関連する .NET コンパイラの異常さが原因でした。デザイナー ファイルにコントロールが正しく定義されている場合でも、それを削除し、再生成して再構築してください (単に「構築」するのではなく、必ず再構築してください)。デザイナー ファイルを再生成する方法については、ここでのトップの回答を参照してください。

Visual Studio に aspx/ascx ファイルの .designer ファイルを強制的に再生成するにはどうすればよいですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top