2009-03-03 72 views
0

我有一個子例程,我從數據庫中獲取信息。我想在另一個子程序中使用該子程序中的變量。我試圖讓所有的東西都公開,但它不想友好和分享。如何將一個變量從子程序共享到子程序?

Dim strEmail as String 
Public Sub readDB() 
strEmail = "[email protected]" 
End Sub 

Public Sub submit_btn(ByVal sender As Object, ByVal e As EventArgs) 
Response.Write(strEmail) 
End Sub 

readDB將讀取數據庫並設置變量並執行所需的任何操作。然後,當他們提交表格時,將通過電子郵件將表格發送到任何電子郵件地址。

+0

你可以張貼一些示例代碼? – 2009-03-03 20:24:15

+0

@zodeus:標記爲vb.net – 2009-03-03 20:25:53

回答

3

每當加載一個asp.net頁面時,全局變量就會被清除。你可以通過使用Session變量來避免這種情況。

Public Sub readDB() 
    Session("strEmail") = "[email protected]" 
End Sub 

然後:

Public Sub submit_btn(ByVal sender As Object, ByVal e As EventArgs) 
    Response.Write(CStr(Session("strEmail"))) 
End Sub 
1

把它們作爲參數傳遞是非常好的,如果對有問題的子集的調用順序可行的話。如果你真的需要一個在同一個類的不同的子類中可見的變量(ASP.Net中的代碼隱藏頁面),你正在尋找的可能是一個私有成員變量。在訪問修飾符Private之外的任何子或函數之外聲明它,並且該類中的所有子類將能夠訪問它。

Private _foo As String 

下劃線是有些人喜歡的,有些討厭的約定。它適用於VB,如果你想定義一個屬性來暴露變量,你不能使用Foo明顯不同於foo,但那是另一回事。

這是不一樣的你會一般由長期全球變量在ASP.Net意義,其中變量將是整個應用程序上下文,它適合於在最意想不到的後果可見的理解。私有成員變量只對擁有它的類可見。

編輯:您的示例代碼是在我的初始答案後添加的。我的VB有點生疏,但正如你寫的一樣,strEmail看起來應該有類級別的知名度,其中包括submitbtn(有人糾正我,如果我錯了)。一種可能性,因爲您提到您在頁面調用readDB Page_Load是,如果您在頁面加載中檢查回發,並且只在初始加載時調用readDB,而不是在回發時調用readDB,這會在單擊按鈕時出現。你可能看過一些例子,包括檢查Postback是否失控並且沒有意識到它的作用(我只是建議你這樣說,因爲你提到你是ASP.Net的新手,如果你是新手的話,它並不直觀 - 沒有意圖犯罪)。

Protected Sub Page_Load (sender as object, e as EventArgs) 
    If Not IsPostback 
     // this doesn't get called when the button is clicked so 
     // strEmail would not be populated when submitbtn is invoked 
     readDB 
    End If 
End Sub 

這是一個無處不在的猜測,所以它可能會離開基地。您是否在Page_Load中設置了斷點,readDB和submitbtn以查看每個中的strEmail的狀態?

相關問題