asp.net登录控件:怎么了?

时间:2011-03-24 19:27:05

标签: c# asp.net login-control

我正在使用ASP.NET应用程序,在主页C#代码中我想访问登录控件,所以我有以下代码:

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

但是,当这一行

时,我得到异常“对象引用未设置为对象的实例”
login = this.Master.FindControl("login") as Login;

已执行。

我看不出有什么不对......

感谢。

3 个答案:

答案 0 :(得分:1)

如果我正确阅读了您的问题,您有一个母版页,并且您正尝试使用FindControl在那个页面上查找名为login的控件。如果是这样,那么你应该这样做:

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

因为这个:

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

将在母版页中寻找当前母版页嵌套的控件。

换句话说,如果您有一个嵌套的母版页 - 例如Site.Master,那么最后一行代码将起作用,并且还有一个嵌套的子MasterPage,名为Section.Master,如果登录控件在Site.Master中,代码片段在Section.Master中。

(希望这是有道理的。)

答案 1 :(得分:0)

如果上面提到的代码在母版页中,请尝试删除代码的主部分...

例如

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

这样做的原因是因为当前母版页未嵌入到另一个母版页中。因此,当您尝试访问主的主页面时(即this.Master.FindControl()),您将收到“对象未设置”错误

只是想知道,如果是这种情况,是否有理由不能通过名称访问控件?

答案 2 :(得分:0)

您应该能够直接通过ID元素引用登录控件。

在标记中:

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

在代码隐藏中:

MainLogin.Visible = false;