2011-03-24 58 views
1

我工作的ASP.NET应用程序,并在母版页C#代码,我想访问登录控制,所以我有以下代码:asp.net登录控制:出了什么问题?

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

但是,我得到的例外“对象未设置到一个对象的实例“当这条线

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

被执行。

我看不到会出现什么问题...

谢谢。

+0

您的登录控制权在哪里? – 2011-03-24 19:31:02

+0

在同一母版页上。 – GoG 2011-03-24 19:31:40

+0

登录控件是否在LoginView中? – 2011-03-24 19:39:37

回答

0

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

例如

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

为什么会工作的原因是因为目前母版页未嵌入在另一个母版页中。因此,当您尝试访问主控主页面(例如this.Master.FindControl())时,您会看到“对象未设置”错误(如果这样的话,是否有理由为什么您无法通过名称访问控件?

+0

非常感谢,解决了我的问题。而对于你的问题 - 对我来说也是奇怪的,我不能仅通过它的ID访问控件,所以我在一本书中为.net搜索了一个答案,并发现这些控件可以用这种方式访问主页... – GoG 2011-03-24 19:40:59

0

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

在标记:

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

在后台代码:

MainLogin.Visible = false; 
+0

你不想使用Page.Master.FindControl? – CrazyCoderz 2011-03-24 19:37:43

+0

你为什么想要?我在这里错过了什么吗? – 2011-03-24 19:38:18

+0

这些控件不能只通过它们在主页面代码中的ID来访问,所以这就是为什么我使用Page.FindControl(“”) – GoG 2011-03-24 19:51:17

1

如果我正确地读你的问题,你有一个母版页和你要使用的FindControl找到一个名为控制登录页面。如果是这样,那么你应该这样做:

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

,因为这样的:

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

要寻找到您当前母版页嵌套在母版页控制

换句话说,如果你有一个嵌套的母版页 - 最后一行代码将工作 - 对于示例Site.Master,并且还有一个名为Section.Master的嵌套子节点MasterPage,如果登录控件位于Site.Master和代码段中在Section.Master中。

(希望有道理。)

+0

谢谢。事情现在已经清楚了。 – GoG 2011-03-24 19:44:16