ASP.NET中的AutoPostBack和IsPostBack以及EnableViewState三者的运用以及区别

来源:互联网 发布:百度语音识别api php 编辑:程序博客网 时间:2024/06/04 18:54

相信大家都在开始学ASP.NET的时候都会被它里面的几个属性搞得晕头转向,本文向各位学者介绍AutoPostBack和IsPostBack以及EnableViewState三者的运用以及区别,话不多说,让咱们来看例子来说明问题

1.IsPostBack

新建一个网站,在页面放置一个DropDownList和一个按钮,我希望点击按钮之后添加往DropDownList之中添加一条内容

//Default.aspx.cs

protected void Page_Load(object sender, EventArgs e)
    {
        DropDownList1.Items.Add("111111");
        DropDownList1.Items.Add("222222");
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        DropDownList1.Items.Add("这是按钮添加的一条");
    }

运行效果:

很明显,这不是我们想要的结果,原因是页面在每一次刷新时都会运行Page_Load函数,页面初次加载时运行一次,点击按钮时又加载一次,导致上面的结果,如何解决?

protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack == false)
        {
            DropDownList1.Items.Add("111111");
            DropDownList1.Items.Add("222222");
        }
    }


  运行正确,通过调试我们可以发现第二次并没有运行if里面的内容,说明除了第一次IsPostBack属性为false时,以后IsPostBack属性都为true,相信大家都理解了吧,哈哈哈哈偷笑

2.AutoPostBack
  还是以上面的例子来说明,双击DropDownList,添加事件如下:
  protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
            DropDownList1.Items.Add("这是当选中DropDownList时添加的一项");
    }
   我希望当选中DropDownList时里面应该添加一项,但是我们发现没有添加,我们调试一下:

发现程序并没有运行到这儿,DropDownList没有添加一项也就不足为奇了,怎么解决?其实很简单,把DropDownList的AutoPostBack属性勾上就好了

再次运行就是我们想要的结果,哈哈哈哈,是不是很简单,掌握了木有,掌握了之后,最后让我们来看看
EnableViewState这个属性吧...
3.EnableViewState
  新建一页面,同理在页面中放一个DropDownList(把DropDownList的EnableViewState属性改为false)和一个Button,在Button_Click函数里面添加代码如下:
   protected void Button1_Click(object sender, EventArgs e)
    {
        DropDownList1.Items.Add("按钮添加一项");
    }
  我希望运行时点击Button会一直不断的添加,可实际情况如下:

无论点击多少次,都只有一项内容
这是因为把DropDownList的EnableViewState属性改为了false,把它改为true之后,再次运行就是我们想要的结果。。why????

是这样的,我们在浏览器页面中所填写的信息最终都会交给服务器处理,在客户端浏览器和服务器中间有一个_VIEWSTATE的一种机制,每次客户端向服务器发信息都要连同_VIEWSTATE里面保存的信息一起发给服务器,服务器接收到信息后然后处理。我们打开网页的"查看源"如下:


我们发现有个_VIEWSTATE这个东西,是隐藏的,当点击按钮之后再次查看这个,会发现valu的值变得长了,相信大家会猜到发生什么了吧,value里面保存了点击按钮之后给DropdownList添加的值,,换句话说,我们每次点击按钮时服务器都会从这个_VIEWSTATE里面接收客户端的信息,,,当把EnableViewState改为false时,每次刷新页面_VIEWSTATE没有保存客户端的信息,,恩,这样大家应该就会理解了吧,,哈哈哈,是不是很简单。。


0 0
原创粉丝点击