利用 ViewState 和 IsPostBack 维护表单状态

Asp.Net 版块开张啦!先献上一篇初级教程热热手,嘿嘿!

ViewState和IsPostBack是什么,这里就不多作介绍了,我们今天讲是在什么情况下使用这两个好东东

在Asp.Net中,因为引入了ViewState,使程序能够在表单提交的时候,将表单元素,如TextBox/DropDownList中的值保留下来,这在用户注册程序时特别有用,比如用户输入了一个不合法的用户名,提交后程序判断不全法,页面仍然停留在原来的表单填写界面,如果是 Asp/Php 程序,之前填写的值就丢了,但 Asp.Net 而可以将之前填写的值保存下来,超方便地说……

默认情况下,ViewState 对于每个页面都是自动启动的,实际上是相当没有必要的,这会加重服务器上内存的耗用,所以还是建议在 web.config 中<system.web>节点中加一段<pages enableViewState="false" validateRequest="false" />来全局禁用所有页面的 ViewState ,再在需要的页面中来开启。

以上两段很多网页中都有介绍,算是一点铺垫……

之前讲到 ViewState 用于维护表单状态,但朋友们在试的时候却发现,就算页面中禁用了ViewState,仍然可以保留表单元素的值,那ViewState有什么意义呢?

很多情况下,ViewState是和IsPostBack配合使用的,我们可能会遇到这样一种情况,就是注册表单中的下拉菜单选项可能是从数据库中动态加载的,比如国家/省份/城市,加载的事件是Page_Onload ,这样的话,只要重新访问页面时,下拉菜单中的数据就会复位,就无法达到保值的效果,这个时候 IsPostBack 就派上用场了。

IsPostBack 全称是Page.IsPostBack属性,它用于判断当前页面在访问时是否有一个Post行为,简单地说就是是否是一个被提交过的页面,他返回 true/false。

我们可以在动态绑定下拉菜单的代码的外部嵌入一个 if(IsPostBack) 来决定是否需要动态加载菜单项,这样一来,即能保值,也避免了页面提交时需要重新访问数据库来加载菜单项,一举两得,呵呵……

附上源码:

注意,请用记事本编辑后另存为 utf-8 格式保存,以免出现乱码问题

第一个文件:

1<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="true" CodeFile="IsPostBack.aspx.cs" Inherits="lesson_IsPostBack" %>
2
3
4
5
6         

第二个文件:

 1using System;
 2using System.Configuration;
 3using System.Collections;
 4using System.Web;
 5using System.Web.UI;
 6using System.Web.UI.WebControls;
 7
 8public partial class lesson_IsPostBack : System.Web.UI.Page
 9{
10protected void Page_Load(object sender, EventArgs e)
11{
12if (!IsPostBack)
13{
14int[] ary ={ 1, 2, 3, 4 };        //这里将数组作为数据源绑定,读者可自行修改为数据库调用
15dl.DataSource = ary;
16dl.DataBind();
17}
18else
19{
20Response.Write("页面提交时间 : " + DateTime.Now);
21}
22}
23}