2011-03-24 27 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