2010-02-23 119 views
4

IM真正的新ASP.Net,仍然havnt了我的头一轮大多数的概念,我真的有可变的问题,创建一个桌面应用程序,在代码中创建例如ASP.NET变量范围

任何变量时
int n = 10; 

这个变量将在那里,直到程序运行正确。但在asp iv中创建的变量应该持续到用户获取该页面为止,例如说,我有一个页面,其中包含用户值(调用此变量n表示用户类型为10),并且每次用户按下代码的下一个按钮将10添加到此值。所以第一次用户按下一个按钮

n= n + 10; 

我所发现的是,无论多少次,我按下一个按钮,将n总是等于20,这是因为以前的值不会被保存!

这些值在用户第一次进入该页面时被填充,一旦用户点击下一个按钮,这些值的内容就消失了!如何能够阻止这种情况发生?

希望这是有道理的!

谢谢

回答

4

每次刷新页面(点击同时刷新页面)页面类的新实例被创建。这意味着你的所有领域都是空的。

您可以尝试使用ViewState在刷新之间保留数据。但你应该小心,因为这会增加页面大小。所以最好的做法是在视图状态下对数据进行最小化。

另一种选择是SessionState,但在这种情况下,您甚至可以在页面之间保留数据。

希望这会有所帮助。

+0

ok说我使用会话,当页面加载所有的变量都填充正确,然后所有这些都存储在会话权。所以例如我有这个参差不齐的数组 受保护的字符串[] [] answersJArray; 然后填充,并存储在会话中,就像这样 Session.Add(“answersJArray”,answersJArray); 后来在我的代码需要通过这个交错数组来遍历,我使用以下代码 对于(j = 0;Ĵ c11ada 2010-02-23 23:53:10

+0

从会话中获得'answersJArray'并按预期工作。 Actullay yuo不需要字段'answersJArray'。 – 2010-02-24 09:31:40

2

变量在ASP.NET中不会自动维护页面调用的状态。 Asp.Net Page有一个生命周期并且是无状态的,在这个周期结束后,在客户端提交请求之后,信息就会丢失。有几个解决方案。

这里是hidden field例子。


在HTML中,您只需创建:

<input type="hidden" id="myHiddenVar"> 

要设置它在JavaScript值:

document.getElementById("myHiddenVar").value = "myValue" 

在ASP.NET代码隐藏,你使用Request对象检索价值。

string myHiddenVar = (string)Request.Params["myHiddenVar"]; 

2
每个

用户请求的页面时,它接收该请求,进行初始化,处理,然后再现(读有关Asp.Net页生命周期here.)。因此,在每个页面请求中,您的变量正在被创建,初始化,然后分配您的值 - 每个页面加载是一个新的生命周期。如果您希望值在页面生命周期之间保持不变,那么您需要使用其中一种可用方法(ViewState,Session,QueryString,Post,...)将值传递给“下一个”请求。

2

变量在ASP.NET工作完全在Windows窗体变量的工作方式:

public class MyPage : System.Web.UI.Page 
{ 
    private int n = 0; 

    public void Button_Click(object sender, EventArgs e) 
    { 
     n = n + 1; 
    } 
} 

public class MyForm : System.Windows.Forms.Form 
{ 
    private int n = 0; 

    public void Button_Click(object sender, EventArgs e) 
    { 
     n = n + 1; 
    } 
} 

那么,为什么与页面是吧,那的旧值“N”走了,下一次你打了网页?

因为HTTP是请求/响应协议。每个请求都会创建一个MyPage类的新实例,每个实例都有自己的“n”副本。在Windows窗体应用程序中,您可能不会在每次点击按钮时创建表单的新实例!