我正在使用ASP.NET应用程序,在主页C#代码中我想访问登录控件,所以我有以下代码:
Login login = new Login();
login = this.Master.FindControl("login") as Login;
但是,当这一行
时,我得到异常“对象引用未设置为对象的实例”login = this.Master.FindControl("login") as Login;
已执行。
我看不出有什么不对......
感谢。
答案 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;