[英]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中會派上用場,在這里您不能使用Foo與foo明顯不同,但這是另一回事了。
這與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.