2009-10-19 88 views
2

我正在做一個vb.net項目,我在代碼隱藏文件(* .vb)中找不到一些控件。我想知道是因爲我在page_load函數中工作,所以控件在page_control事件之後才加載。但是我可以通過formview目標的findcontrol函數找到它們。代碼後面的控制

+0

請提供您的aspx文件和代碼隱藏示例。 – Restuta 2009-10-19 21:47:22

+0

它確實是通用的。 aspx文件中的asp文字,我在vb文件的page_load函數中查找它 – 2009-10-19 22:07:06

回答

0

的控制將在同一溶液中的局部的一部分。只需找到您的班級名稱的所有參考。

+0

你檢查了InitializeComponent()的內容嗎? – 2009-10-19 21:53:33

+0

什麼文件再次包含該功能?我曾經在一個C#項目中看到它。不在我目前的VB項目。 – 2009-10-19 22:04:25

0

我偶爾會遇到將控件添加到頁面而智能感知不能識別控件的問題。編譯器似乎也無法識別該控件並阻止編譯該項目。這可能是非常令人沮喪的,我真的不知道爲什麼。

有時,它有助於關閉aspx頁面和代碼文件,有時關閉Visual Studio和重新打開它的工作原理。有時候它們都不起作用,我只是嘗試另一種方式來完成任務。

我不知道這是否是您遇到什麼,但即便如此,它絕對可以讓你從頭開始你的頭,不知道是怎麼回事。

+0

試圖關閉VS網站。沒有工作。 – 2009-10-19 22:05:48

1

如果這些控件是在aspx中聲明的,那麼它們就是在您的Page類的部分類中定義的。 這是與.Net v2.0一起引入的,因此與設計師混淆不會讓你的代碼隱藏在文件後面(這在某些情況下導致了很多問題)。

您可以從頁面加載事件訪問控件。有時候智能感知會對你起詭計,並沒有提示控制權。只需輸入它即可。您可以關閉aspx頁面並再次打開。有時候會修復它。或者只是重新啓動Visual Studio,如果你感到惱火。

然而,有幾個方面的考慮,如果你有興趣在頁面的生命週期期間訪問在特定的時間控制數據。 服務器控件都有自己的生命週期,它類似於頁面生命週期,但在該事件被觸發的控制順序如下:

  1. InitUnload事件控制之前發生該事件是爲容器提出的(自下而上)。
  2. Load事件用於控制發生後的事件引發的容器(自上而下)。

您可以找到Page life cycle events on MSDN的更詳細的解釋。模板(如您的FormView控件,或在GridView)內

+0

這很讓人困惑。澄清,Init和Unload事件發生在直接父容器的init和unload事件發生之前,像formview一樣? – 2009-10-19 22:09:58

+0

這是正確的。因此,如果您在頁面上有標籤,則會首先在您的標籤上觸發Init事件,然後在您的頁面上觸發。 – 2009-10-19 22:12:35

2

控件是不是在後面的代碼直接訪問。您必須使用FindControl才能訪問這些控件。

+0

是有原因的嗎? – 2009-10-19 22:15:29

+2

我不確定爲什麼FormView以它的方式工作,但對於GridView而言,控件存在於每一行中,因此頁面上實際上有多個版本的控件。因此,您必須在適當的容器上使用FindControl以在運行時查找控件。 – 2009-10-19 22:19:32

+0

未來感謝你。 – 2012-01-04 22:12:06

1

很難說出究竟是什麼問題;如果你可以在這裏發佈一些代碼,這將有所幫助。

我有兩個猜測/建議:

  1. 如果您有brentkeller被描述問題,什麼通常被完全修復了這個對我來說是刪除aspx.designer.cs文件,然後右鍵單擊在.aspx文件上並選擇「轉換爲Web應用程序」。這將重新創建設計器文件。

  2. 該控件位於像Jason Berkan建議的模板內。例如,如果它在LoginView中,則可以在LoginView上使用.FindControl(「controlId」)。