我想聲明一個Dictionary<string, object>
變量,但不知道在哪裏/如何。字典中的值將來自Page(ListBoxes,DropDownLists等)的對象,所以我不能在其他地方準確地創建一個輔助類。有什麼辦法可以讓代碼隱藏的每個方法都可以訪問這個變量嗎?在ASP.NET代碼隱藏聲明一個全局變量
1
A
回答
3
聲明該類中的變量,但在任何方法之外。例如:
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
private Dictionary<string, object> myDictionary;
protected void Page_Load(object sender, EventArgs e)
{
myDictionary = new Dictionary<string, object>();
myDictionary.Add("test", "Some Test String as Object");
}
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
myDictionary.Add("TextBox1Value", TextBox1.Text);
}
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = myDictionary["test"].ToString();
}
}
}
0
您可以創建一個必須公開的類文件(比如general.cs),以便可以輕鬆訪問它。在這個類文件中,你可以定義這個全局變量。
您可以從任何其他頁面或類中訪問此變量,因爲它定義爲public,並且可以通過創建類的實例來利用此全局變量。
0
您可以在類聲明行之後的代碼行中聲明變量。如果你只是想在一個頁面上使用它,這將工作。
3
上有什麼樣的數據,你想要多長時間儲存等等看Session State,ViewState多個選項,根據您的全局變量要求我Application State
可以想到兩種可能性。
使用靜態類和靜態變量,如下面的代碼所示。
internal static class GlobalData { public static Dictionary<string, object> SomeData { get; set; } }
現在使用它
//initialize it once in Application_Start or something.
GlobalData.SomeData = new Dictionary<string, object>();
//use it wherever you want.
object o = GlobalData.SomeData["abc"];
2使用Application
狀態來存儲您的全局數據。如下。
//Store it in application state
Application["YourObjectUniqueName"] = new Dictionary<string, object>();
//access it wherever using
Application["YourObjectUniqueName"]["abc"]
9
有三個地方可以存儲數據。在應用程序級別,使數據可供所有會話訪問。會話級別,使數據可供該特定用戶的所有頁面使用。或者,可以在當前頁面上使用的頁面級別,在回發之間。請參見下面的例子:
在應用級別存儲
樣品類來封裝存儲:
public static class ApplicationData
{
private static Dictionary<string, object> _someData = new Dictionary<string, object>();
public static Dictionary<string, object> SomeData
{
get
{
return _someData;
}
}
}
使用Sample(在頁面加載事件): 這將增加所有會話的價值。要嘗試它,請在您的計算機上打開兩個瀏覽器並使用相同的URL。注意如何爲每個用戶的請求增加值。
// Application Data Usage
if (ApplicationData.SomeData.ContainsKey("AppKey"))
{
ApplicationData.SomeData["AppKey"] = (int)ApplicationData.SomeData["AppKey"] + 1;
}
else
{
ApplicationData.SomeData["AppKey"] = 1;
}
Response.Write("App Data " + (int)ApplicationData.SomeData["AppKey"] + "<br />");
存儲會話級: 樣品類來封裝存儲:
public class SessionData
{
private Dictionary<string, object> _someData;
private SessionData()
{
_someData = new Dictionary<string, object>();
}
public static Dictionary<string, object> SomeData
{
get
{
SessionData sessionData = (SessionData)HttpContext.Current.Session["sessionData"];
if (sessionData == null)
{
sessionData = new SessionData();
HttpContext.Current.Session["sessionData"] = sessionData;
}
return sessionData._someData;
}
}
}
使用Sample(在頁面加載事件): 值增加爲當前用戶的會話。當另一個會話在服務器上運行時,它不會增加。
// Session Data Usage.
if (SessionData.SomeData.ContainsKey("SessionKey"))
{
SessionData.SomeData["SessionKey"] = (int)SessionData.SomeData["SessionKey"] + 1;
}
else
{
SessionData.SomeData["SessionKey"] = 1;
}
Response.Write("Session Data " + (int)SessionData.SomeData["SessionKey"] + "<br />");
頁級存儲
內頁:
private Dictionary<string, int> _someData;
private Dictionary<string, int> SomeData
{
get
{
if (_someData == null)
{
_someData = (Dictionary<string, int>)ViewState["someData"];
if (_someData == null)
{
_someData = new Dictionary<string, int>();
ViewState.Add("someData", _someData);
}
}
return _someData;
}
}
用法示例
在按鈕點擊網頁加載處理 if (!this.IsPostBack)
{
incrementPageState();
Response.Write("Page Data " + SomeData["myKey"] + "<br />");
}
private void incrementPageState()
{
// Page Data Usage
if (SomeData.ContainsKey("myKey"))
{
SomeData["myKey"] = SomeData["myKey"] + 1;
}
else
{
SomeData["myKey"] = 1;
}
}
:
protected void hello_Click(object sender, EventArgs e)
{
incrementPageState();
Response.Write("Page Data " + SomeData["myKey"] + "<br />");
}
請記住,該ViewState是不是反序列化頁面加載,但它會在事件處理程序一樣Button.Click
的所有代碼已經過測試,如果你想要完整的解決方案進行反序列化,讓我知道,我會通過電子郵件發送給你。
相關問題
- 1. 訪問JavaScript的全局變量從代碼隱藏在asp.net
- 2. 聲明一個全局的Request.ServerVariable變量
- 3. 如何在ASP.NET MVC中聲明一個全局變量頁面
- 4. 在全局頭文件中聲明一個全局變量?
- 5. 隱藏變量聲明VBA
- 6. 聲明全局變量
- 7. 全局變量聲明
- 8. 聲明一個全局變量用作本地變量
- 9. Eclipse:未明確聲明全局變量
- 10. 警告:「索引」的聲明隱藏了全局聲明
- 11. 在Arduino中聲明全局變量
- 12. 在perl中聲明全局變量
- 13. 在ActionScript中聲明全局變量?
- 14. 在Matlab中聲明全局變量
- 15. 在coffescript中聲明全局變量
- 16. 在yacc中聲明全局變量
- 17. 全局變量在android中的聲明
- 18. 在Java中聲明全局變量
- 19. 在全局變量中聲明查詢
- 20. 在Python中聲明全局變量類
- 21. 在Swift中聲明全局變量
- 22. 在vb中聲明全局變量
- 23. CodeIgniter隱藏非CI全局變量時包括外部代碼
- 24. 在JavaScript中聲明一個臨時變量到一個全局變量responseText
- 25. 哪一個更好,在類中聲明全局變量或在Java類中聲明局部變量?
- 26. 在scala中聲明一個全局變量
- 27. 我如何在AngularJs中聲明一個全局變量2
- 28. 如何在php中聲明一個全局變量?
- 29. 如何在actionscript中聲明一個全局變量
- 30. 在MATLAB中聲明一個全局變量
您的意思是在類級別(頁面)聲明,這使得它在所有方法中都可用? – V4Vendetta 2011-03-18 11:36:25
你應該根據你接受的答案來改變你的問題的標題,看起來你不需要全局變量,你需要一個頁面內的實例變量。 – 2011-03-18 12:00:36