我所知道的:
ViewState用来保存往返页面和控制值,从而可以使新请求的页面恢复为提交页面的状态。
ViewState以加密方式保存在隐藏字段__ViewState__中但是我有很大的疑问:
1>为什么TextBox的Color,MaxLength等属性也保存在ViewState中?(反编译可以看到)
2>TextBox的Text值本来就会回传到服务器,还为什么要保存在ViewState中?(类似有Select的value等)
3>由于1>2>,ViewSate到底有什么用?200分求答案。可以比较详细的说明ViewState的用法的话,可以加分。代码只要说明问题即可,不要复制和粘贴一大堆。
ViewState用来保存往返页面和控制值,从而可以使新请求的页面恢复为提交页面的状态。
ViewState以加密方式保存在隐藏字段__ViewState__中但是我有很大的疑问:
1>为什么TextBox的Color,MaxLength等属性也保存在ViewState中?(反编译可以看到)
2>TextBox的Text值本来就会回传到服务器,还为什么要保存在ViewState中?(类似有Select的value等)
3>由于1>2>,ViewSate到底有什么用?200分求答案。可以比较详细的说明ViewState的用法的话,可以加分。代码只要说明问题即可,不要复制和粘贴一大堆。
解决方案 »
- 动态table(不是绑定) 分页问题
- xml作为数据库,最大能承受多少M,或者说多少数据量
- 同一网站下,保存路径(cook.Path)对应不同的目录的cookie,如何在网站的根目录下访问?
- 救救小妹吧~~ASPNETC#制作中文版的网站怎么转化成英文版的 ??
- 急!我写一个timeout.aspx文件,在其它文件包它,没用!
- 项目 E:\HomeTeachingWeb 似乎处于源代码管理下,但此计算机上没有安装相关联的源代码管理插件。将对此项目禁用源代码管理。
- 请问用水晶报表作的表格式报表,当记录未满一页时,如何自动将空白的部分也划上横线
- DATAGRID分页后,DATAKEY还是第一页的值
- MVC4 - 装载items(保留之前的items ) 不刷新View的难题?
- 关于读取XML文件的问题?在线等待!!
- ASP.NET页面居中显示和MasterPage问题!!
- 两个问题,为什么使用接口,new和override的区别
(1)Color,MaxLength等属性为什么要保存在ViewState中?//自定义控件
public class SampleControl : WebControl{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string Text
{
get;set;
} #endregion protected override void Render(HtmlTextWriter writer)
{
writer.Write(Text);
}
}
}protected void Button2_Click(object sender, EventArgs e)
{
this.SampleControl1.Text = "btn1";
} protected void Button3_Click(object sender, EventArgs e)
{
}如果你先点Button2,页面展示btn1。然后你再你认为你点Button3的时候,页面上展示的控件会显示什么呢?ViewState的作用就是用来保持这个btn1的。当前没有使用ViewState保持Text的值,所以页面不会保持btn1
{
base.ValidateEvent(postDataKey);
string text = this.Text;
string str2 = postCollection[postDataKey];
if (!this.ReadOnly && !text.Equals(str2, StringComparison.Ordinal))
{
this.Text = str2;
return true;
}
return false;
}
使用ViewState对象。
2.传递给当前页面链接到的另一页面
使用Request.QueryString
3.传递给没有直接关联的页面
使用Session、Cookie或全局变量。如上,ViewState用来给页面本身传递数据用。比如我们有一个变量,值为:100,然后页面放一个按钮,每点一次给这个变量加1,然后显示到一个TextBox中,通常应该是这样的代码: private int id;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
id = 100;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
id++;
TextBox1.Text = id.ToString();
}
但是,实际运行一下会发现结果不是我们预想的。这是因为:当页面提交或刷新后,由于Web页面的无状态性,这个变量的值会消失,因此通常把它保存到ViewState中,在刷新后从ViewState中取回该值。改用下面的代码: private int id;
protected void Page_Load(object sender, EventArgs e)
{
if (ViewState["id"]==null)
{
id = 100;
ViewState["id"] = id;
}
else
{
id =(int) ViewState["id"];
}
}
protected void Button1_Click(object sender, EventArgs e)
{
id++;
TextBox1.Text = id.ToString();
ViewState["id"] = id;
}
就可以得到我们想要的结果。