我正在开发 ASP.NET 应用程序,并且在我想访问登录控件的母版页 C# 代码中,所以我有以下代码:
Login login = new Login();
login = this.Master.FindControl("login") as Login;
但是,当此行出现异常“对象引用未设置为对象的实例”时
login = this.Master.FindControl("login") as Login;
被执行。
我看不出有什么问题...
谢谢。
我正在开发 ASP.NET 应用程序,并且在我想访问登录控件的母版页 C# 代码中,所以我有以下代码:
Login login = new Login();
login = this.Master.FindControl("login") as Login;
但是,当此行出现异常“对象引用未设置为对象的实例”时
login = this.Master.FindControl("login") as Login;
被执行。
我看不出有什么问题...
谢谢。
如果我正确阅读了您的问题,那么您有一个母版页,并且您正在尝试使用 FindControl 在该页面上查找名为 login 的控件。如果是这样,那么你应该这样做:
login = this.FindControl("login") as Login;
因为这:
login = this.Master.FindControl("login") as Login;
将在当前母版页嵌套的母版页中查找控件。
换句话说,如果您有一个嵌套母版页 - 例如 Site.Master,并且还有一个名为 Section.Master 的嵌套子 MasterPage,如果登录控件位于 Site.Master 和代码片段中,那么最后一行代码将起作用在 Section.Master 中。
(希望这是有道理的。)
如果上面提到的代码在母版页中,请尝试删除代码的母版部分...
例如
login = this.FindControl("login") as Login;
这会起作用的原因是因为当前母版页没有嵌入到另一个母版页中。因此,当您尝试访问 master 的 Master 页面(即 this.Master.FindControl())时,您会收到“object not set”错误
只是想知道,如果是这种情况,您是否有理由无法通过其名称访问控件?
您应该能够通过 ID 元素直接引用登录控件。
在标记中:
<asp:Login runat="server" ID="MainLogin" ....... />
在代码隐藏中:
MainLogin.Visible = false;