ASP.NET Page.IsPostBack

有关if (!IsPostBack):

       经常有人忘记写if (!IsPostBack)结果导致提交后取不到用户所选择的列表的值,因为Page_Load先执行,控件被重新初始化了。

       所以,如果你是通过服务器控件触发事件来进行数据库更新的话,在你的page_load事件中把所有程序放在if (!IsPostBack)里面,否则你会发现显示的总是第一次载入的值。

       一个页面第一次显示的时候IsPostBack=false,然后你在这个页面上点击按钮或其它东西提交的时候,IsPostBack=true。

       if(!IsPostBack),获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。

       IsPostBack 由于用户交互(page.submit())提交页面而产生的加载,二次加载。第一次加载页面时,Page.ispostback是false,当触发该页面的web控件时,产生回发,这时候该属性会是true,所以要用if(!IsPostback)来判断,只在第一次进入页面时加载数据。

       Details

(1)if (!IsPostBack) 里面的代码只执行一遍,即页面第一次加载时。

(2)以后页面重新刷新时,if (!IsPostBack)里面的语句不执行。

(3)首次建立页面 IsPostBack为false,用来控制里边的语句只执行一次。

(4)在对控件进行数据绑定时是必须加上的,因为如果不加的话,每一次响应客户端回发时,总是要执行一次Page_Load(),接着又要执行数据绑定的语句了,如此你不能选择数据了。

例子:

一个页面,一个ListBox控件。一个Label。

初次加载时绑定数据到ListBox控件。

用户选择ListBox的项后,自动在Label中显示选中项的值。

代码:
以下代码是没有Page.IsPostBack的时候

protected void Page_Load(object sender, EventArgs e)
    {
        dt =
数据源;
        ListBox1.DataSource = dt; //为ListBox1绑定数据
        ListBox1.DataTextField = "dname"; //设置ListBox1每项的文字为数据源的dname列中的值
        ListBox1.DataValueField = "dfname"; //设置ListBox1每项的值为数据源的dfname列中的值
        ListBox1.DataBind();
    }

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
         Label1.Text = ListBox1.SelectedValue; //
当用户选中ListBox中的列时在Label中显示选中列的值
    }

此时运行页面,在选中ListBox中的值后Label中无法显示ListBox选中项的值。

因为在ListBox的SelectedIndexChanged(控件中的值被选中)发生后,页面自动向服务器提交表单。

服务器处理后(自动提交后服务器将处理protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e里面的内容)),返回客户端,页面重新读取,此时又会运行Page_Load里面的代码,所以页面又会是第一次加载时候的样子。Label中就不会显示 ListBox中选中项的值。

如果Page_Load换成这样:

if (!Page.IsPostBack)
    {
        dt =
数据源;
        ListBox1.DataSource = dt; //为ListBox1绑定数据
        ListBox1.DataTextField = "dname"; //设置ListBox1每项的文字为数据源的dname列中的值
        ListBox1.DataValueField = "dfname"; //设置ListBox1每项的值为数据源的dfname列中的值
        ListBox1.DataBind();
    }

那么,在服务器处理了SelectedIndexChanged后。客户端将得到提示,这是响应客户端回发而加载。那么,绑定ListBox的代码将不会运行。Label中就能正确显示ListBox选中项的值了!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值