我想声明一个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. 如何在ASP.NET MVC中声明一个全局变量页面
- 3. 在全局头文件中声明一个全局变量?
- 4. 隐藏变量声明VBA
- 5. 全局变量声明
- 6. 在ActionScript中声明全局变量?
- 7. 在yacc中声明全局变量
- 8. 在coffescript中声明全局变量
- 9. 在全局变量中声明查询
- 10. 在Java中声明全局变量
- 11. 在Swift中声明全局变量
- 12. 全局变量在android中的声明
- 13. 在vb中声明全局变量
- 14. 哪一个更好,在类中声明全局变量或在Java类中声明局部变量?
- 15. 在python中声明一个函数中的全局变量
- 16. 在MATLAB中声明一个全局变量
- 17. 在scala中声明一个全局变量
- 18. 如何在actionscript中声明一个全局变量
- 19. iPhone,存取阵列,局部声明隐藏实例变量
- 20. Python类正在更改全局变量而未声明全局
- 21. 全局变量多重声明
- 22. proc声明中的Tcl全局变量
- 23. Oracle触发器:声明全局变量
- 24. 声明Button1_Click中的全局变量
- 25. 声明和初始化全局变量
- 26. JavaScript;我如何声明变量全局?
- 27. 无法用TypeScript声明全局变量
- 28. 如何声明全局变量
- 29. 如何声明全局变量?
- 30. 使全局变量“隐藏”和“别名”
您的意思是在类级别(页面)声明,这使得它在所有方法中都可用? – V4Vendetta 2011-03-18 11:36:25
你应该根据你接受的答案来改变你的问题的标题,看起来你不需要全局变量,你需要一个页面内的实例变量。 – 2011-03-18 12:00:36