1

ASP.NETアプリで作業していて、マスターページのC#コードでログインコントロールにアクセスしたいので、次のコードがあります。

Login login = new Login();
login = this.Master.FindControl("login") as Login;

しかし、この行の場合、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」という例外が発生します

login = this.Master.FindControl("login") as Login;

実行されます。

何が悪いのかわかりません...

ありがとう。

4

3 に答える 3

1

私があなたの質問を正しく読んだ場合、あなたはマスターページを持っており、FindControlを使用してそのページでloginという名前のコントロールを見つけようとしています。もしそうなら、あなたはこれをするべきです:

login = this.FindControl("login") as Login; 

これは:

login = this.Master.FindControl("login") as Login; 

現在のマスターページがネストされているマスターページでコントロールを探します。

つまり、コードの最後の行は、ネストされたマスターページ(たとえばSite.Master)があり、ログインコントロールがSite.Masterとコードスニペットにある場合はSection.Masterという名前のネストされた子MasterPageがある場合に機能します。 Section.Masterにいました。

(うまくいけば、それは理にかなっています。)

于 2011-03-24T19:36:53.107 に答える
0

上記のコードがマスターページにある場合は、コードのマスター部分を削除してみてください...

例えば

login = this.FindControl("login") as Login;

これが機能する理由は、現在のマスターページが別のマスターページに埋め込まれていないためです。したがって、マスターのマスターページ(つまりthis.Master.FindControl())にアクセスしようとすると、「オブジェクトが設定されていません」というエラーが発生します。

この場合、名前でコントロールにアクセスできない理由はありますか?

于 2011-03-24T19:35:23.627 に答える
0

ID要素によってログインコントロールを直接参照できるはずです。

マークアップ:

<asp:Login runat="server" ID="MainLogin" ....... />

コードビハインド:

MainLogin.Visible = false;
于 2011-03-24T19:36:17.807 に答える