簡體   English   中英

如何在子例程之間共享變量?

[英]How can I share a variable from sub routine to sub routine?

我有一個子例程,從數據庫中提取信息。 我想在另一個子例程中使用此子例程中的變量。 我曾嘗試將所有內容都公開,但不想與他人分享。

Dim strEmail as String
Public Sub readDB()
strEmail = "whatever@doohikcy.com"
End Sub

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

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

每次加載asp.net頁面時,都會清除全局變量。 您可以通過使用Session變量來避免這種情況。

Public Sub readDB()
   Session("strEmail") = "whatever@doohikcy.com"
End Sub

然后:

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

如果有問題的子程序的調用序列使之可行,則將它們作為參數傳遞是很好的。 如果您確實需要一個變量,而該變量對於同一類(ASP.Net中的代碼隱藏頁)的不同子類可見,那么您所尋找的可能是私有成員變量。 使用訪問修飾符Private將它聲明在任何子函數或函數之外,該類中的所有子函數都可以訪問它。

Private _foo As String

下划線是一種約定,有些人喜歡,有些恨。 如果您想定義一個屬性來公開變量,則在VB中會派上用場,在這里您不能使用Foofoo明顯不同,但這是另一回事了。

這與ASP.Net術語中的“ 全局變量”通常理解的含義不同,后者在整個應用程序上下文中都是可見的,這至少會導致意想不到的后果。 私有成員變量僅對擁有它的類可見。

編輯:您的示例代碼是在我最初的回答后添加的。 我的VB有點生銹,但是正如您所寫的那樣, strEmail看起來應該具有類級別的可見性,包括submitbtn內部的內容 (如果我錯了,請糾正我)。 因為您提到要在Page_Load中調用readDB,所以一種可能性是,如果要檢查頁面加載中的回發,並且僅在初始加載時調用readDB,而不是在回發時調用,這是單擊按鈕時的情況。 您可能已經看到了一些示例,其中包括對Postback的檢查,但並沒有意識到它的作用(我之所以建議,是因為您提到您是ASP.Net的新手,如果您不熟悉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的狀態?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM