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,并且还有一个名为 Section.Master 的嵌套子 MasterPage,如果登录控件位于 Site.Master 和代码片段中,那么最后一行代码将起作用在 Section.Master 中。

(希望这是有道理的。)

于 2011-03-24T19:36:53.107 回答
0

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

例如

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

这会起作用的原因是因为当前母版页没有嵌入到另一个母版页中。因此,当您尝试访问 master 的 Master 页面(即 this.Master.FindControl())时,您会收到“object not set”错误

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

于 2011-03-24T19:35:23.627 回答
0

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

在标记中:

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

在代码隐藏中:

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