IsPostBack的用法

来源:互联网 发布:张海山锐线体简 mac 编辑:程序博客网 时间:2024/04/30 02:27

某一天在网上看到有人写了这样一段代码:

protected void Page_Load(object sender, EventArgs e) 
    { 
        if (!IsPostBack) 
        { 
            DropDownList1.AutoPostBack = true; 
        } 
        ArrayList address = new ArrayList(); 
        address.Add("美国"); 
        address.Add("中国"); 
        address.Add("日本"); 
        DropDownList1.DataSource = address; 
        DropDownList1.DataBind();      
    } 
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
        switch(DropDownList1.SelectedValue) 
        { 
            case "中国": 
                { 
                    ArrayList china_address = new ArrayList(); 
                    china_address.Add("湖南"); 
                    china_address.Add("广东"); 
                    china_address.Add("广西"); 
                    DropDownList2.DataSource = china_address; 
                    DropDownList2.DataBind();                    
                    break; 
                } 
            case "美国": 
                { 
                    ArrayList american_address = new ArrayList(); 
                    american_address.Add("洛杉矶"); 
                    american_address.Add("圣安德列斯"); 
                    DropDownList2.DataSource = american_address; 
                    DropDownList2.DataBind(); 
                    break; 
                } 
            case "日本": 
                { 
                    ArrayList japan_address = new ArrayList(); 
                    japan_address.Add("神户"); 
                    japan_address.Add("大板"); 
                    DropDownList2.DataSource = japan_address; 
                    DropDownList2.DataBind(); 
                    break; 
                } 
        }        
    }

然后,就出问题了。

第一次打开页面结果如:

 

然后选择中国,结果如:

 

选择日本呢?结果仍然是:

 

这个问题的所在,就是那个提问的人没有搞明白IsPostBack的概念,这也许是很多初学者容易混淆的一个概念。对于下拉菜单里的数据只需第一次加载页面程序时绑定就可以。象上边的例子写在If(!IsPostBack)代码块外边,这样,每次服务器响应客户端回发时都会重新绑定数据源,因此也就会出现上边的错误结果。

查查msdn,上边有IsPostBack的定义:获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。如果是为响应客户端回发而加载该页,则为 true;否则为 false。

“为相应客户端回发而加载”,注意,这里的客户端的回发是指服务器端响应客户端的回发,这也就决定了该属性是由服务器控件的事件所引起。 对于javascript客户端脚本代码,由于只是运行在客户端,从而执引发不了该属性的执行。

因此上边的例子,我们将代码:

protected void Page_Load(object sender, EventArgs e) 
    { 
        if (!IsPostBack) 
        { 
            DropDownList1.AutoPostBack = true; 
        } 
        ArrayList address = new ArrayList(); 
        address.Add("美国"); 
        address.Add("中国"); 
        address.Add("日本"); 
        DropDownList1.DataSource = address; 
        DropDownList1.DataBind();      
    } 
改为:

protected void Page_Load(object sender, EventArgs e) 
    { 
        if (!IsPostBack) 
        { 
            DropDownList1.AutoPostBack = true;

   ArrayList address = new ArrayList(); 
        address.Add("美国"); 
        address.Add("中国"); 
        address.Add("日本"); 
        DropDownList1.DataSource = address; 
        DropDownList1.DataBind();     
  }


ok,现在的结果是我们想要的结果了,具体的结果如下:

选中国后,结果:

 

选日本后,结果:

 

选择美国后,结果:

 

      

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大人有居住证小孩没有怎么办 异地补办身份证没有暂住证怎么办 挂科了心里难受怎么办 c1升b2考不过怎么办 b2驾照扣了1分怎么办 红绿色盲驾考怎么办 驾驶证忘带被交警查了怎么办 车子被扣45分怎么办 驾照被扣在外省交警支队怎么办 从渭南把驾照转到西安怎么办 a1a2驾驶证扣3分怎么办 车辆累计扣12分怎么办 驾照扣了40分怎么办 驾驶证扣了30分怎么办 b2驾照逾期未审怎么办 c1实习期扣6分怎么办 车子累计扣30分怎么办 实习期间扣满12分怎么办 新手驾照扣6分怎么办 a2驾驶证逾期未审验怎么办 c1驾照扣了6分怎么办 b1驾照被扣12分怎么办 b2驾驶本扣分了怎么办 驾驶本扣9分后怎么办 b1照扣12分怎么办 b2扣了15分怎么办 b2有扣分未年审怎么办 b2驾驶证扣4分怎么办 b2驾驶证扣10分怎么办 刚发驾驶证照片太丑想换怎么办! 考驾照时户口变更怎么办 驾照年审色盲未过怎么办 考驾驶证互联网注册号码怎么办 驾驶证体检视力不过关怎么办 六年驾照满了怎么办 驾照扣了40多分怎么办 一个驾照扣24分怎么办 南昌电动车牌照丢了怎么办 上海餐饮工作人员怎么办健康证 房产过户没有遗嘱公证怎么办 在外地被扣12分怎么办