2011-06-20 46 views
1

考虑一个带有关联代码文件(aspx.cs)的Web表单(aspx)。如何在ASP.NET Web窗体类中处理类字段?

在的CodeFile,例如,我们有以下几点:

public partial class MyPage : System.Web.UI.Page { 

    int myint; 
    string mystring; 

    public void Page_Load(object sender, EventArgs e) { 
     ... 
     if (!this.IsPostBack) { 
     this.myint = 2; 
     this.mystring = "Hello"; 
     } 
     ... 
    } 

} 

我可以期望有两个变量每次页面回发?我的意思是:页面类字段保持为Web表单状态的一部分吗?

三江源

回答

4

没有,这些对象将在的Page-Lifecycle. 结束。如果你想坚持他们,你必须add them to it ViewState的配置。

需要存储在ViewState中的对象必须是serializable

存储简单的数据类型在ViewState

像 ASP.NET大多数类型的状态管理,视图状态依赖于 字典集合,每个项目 被索引有一个唯一的字符串名称。 例如,考虑下面的代码:

ViewState["ViewStateVariableName"] = 1; 

这会将值1(或者更确切地说,一个 整数包含值1) 到ViewState的收集和 给它的描述性名称 ViewStateVariable。如果有 当前没有名称为 ViewStateVariable的项目,将自动添加一个新项目 。如果 已经是一个以此 名称索引的项目,它将被替换。

您可以在已添加视图状态变量的页面/控件中的任意位置访问此变量。 检索值时,使用键名称 。

int number = (int) ViewState["ViewStateVariable"]; 

您还需要检索 值转换为相应的数据类型。 这是因为ViewState 集合将所有项目存储为通用的 对象,这些对象还可以灵活地将 中的任何类型的基本数据类型存储在其中。实际上,您甚至可以将您的自定义对象存储在 视图状态中。在视图状态

存储对象

您可以为您存储 数字和字符串类型很容易地存储在视图 状态自己的对象。但是,要将 存储为查看状态,ASP.NET 必须能够将其转换为 字节流,以便它可以将 添加到 页面中的隐藏输入字段。这个过程被称为 序列化。如果您的对象不是 可序列化(并且默认情况下它们不是 ),则当您尝试将它们置于视图状态时,您会收到错误 消息。

+0

蒂姆·我想你是我成为.NET GURU!非常感谢你总是如此详细(以良好的方式)并且在你的答案中清楚。 :) – Andry

2

不,他们不是。他们没有坚持查看状态。

为了坚持他们,你需要他们,他们的值存储在ViewState中的属性,就像这样:

public string MyString 
{ 
    get { return (string) ViewState["MyString"]; 
    set { ViewState["MyString"] = value; } 
}