关于初学者对ispostback的理解帮助

Page.IsPostBack 是用来检查目前网页是否为第一次加载,当使用者第一次浏览这个网页时Page.IsPostBack 会传回False,不是第一次浏览这个网页时就传回True!

Page_Load 事件中就可以使用ispostback来避免做一些重复的动作。主要用于对一些控件做初始化和数据绑定 有时如果不用ispostback 会发现有时出现一些莫名的错误
这里我举二个例子

例题一(控件初始化):页面有一个标签(初始显示数字为 1 ) 和一个按纽,如何实现单击一次按钮标签显示的数字相当加1

前台我们定义一个lbl1标签和一个btn1按纽 

错误代码:

错误代码
1 protected void Page_Load( object sender, EventArgs e)
2 {
3 lbl1.Text = " 1 " ;
4 }
5 protected void btn1_Click( object sender, EventArgs e)
6 {
7 lbl1.Text = (Convert.ToInt32(lbl1.Text) + 1 ).ToString();
8 }

上面代码页面初始lbl1初始显示数字为1,不管你单击btn1按纽多少次lbl1显示的数字永远为2

错误原因:当你每单击一次btn1按纽后面文件是先执行Page_Load(..)再执行btn1_Click(..),而每次得到的lbl1的初始值为1而累加不了 

正确代码: 

正确代码
1 protected void Page_Load( object sender, EventArgs e)
2 {
3 if ( ! IsPostBack)
4 {
5 lbl1.Text = " 1 " ;
6 }
7 }
8 protected void btn1_Click( object sender, EventArgs e)
9 {
10 lbl1.Text = (Convert.ToInt32(lbl1.Text) + 1 ).ToString();
11 }

例题二(数据控件绑定):页面有gridview控件后台绑定数据源,如何正确地实现对数据行的编辑更新删除等操作

  有二种方法可以做到

     方法一是gridview控件自带的commentfiele 编辑更新删除功能

  方法二是用TemplateField自定义编辑更新删除功能

  这里我们仅实现编辑功能: 

  方法一(gridview控件自带的commentfiele 编辑更新删除功能)前台页面代码 

1 < asp:GridView ID = " GridView1 " runat = " server " AllowPaging = " True "
2 onrowediting = " GridView1_RowEditing " >
3 < Columns >
4 < asp:CommandField ShowCancelButton = " False " ShowEditButton = " True " />
5 </ Columns >
6 </ asp:GridView >

方法一(gridview控件自带的commentfiele 编辑更新删除功能)后台页面代码

代码
protected void Page_Load( object sender, EventArgs e)
{
if ( ! IsPostBack)
{


}
gridview1Bind();
// 此方法不放在IsPostBack里面也可以

}
private void gridview1Bind()
{
DataTable dt
= sqlhelper.ExecuteQuery( " SELECT * FROM [Products] " , CommandType.Text);
GridView1.DataSource
= dt;
GridView1.DataBind();
}
protected void GridView1_RowEditing( object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex
= e.NewEditIndex;
gridview1Bind();
}

  方法二(用TemplateField自定义编辑更新删除功能)前台代码

< asp:GridView ID = " GridView1 " runat = " server " AllowPaging = " True " OnRowEditing = " GridView1_RowEditing " >
< Columns >
< asp:TemplateField ShowHeader = " False " >
< ItemTemplate >
< asp:Button ID = " Button1 " runat = " server " CommandName = " edit " Text = " 编辑 " />
</ ItemTemplate >
< EditItemTemplate >
< asp:Button ID = " Button1 " runat = " server " CommandName = " Update " Text = " 更新 " />& nbsp; < asp:Button
ID
= " Button2 " runat = " server " CommandName = " Cancel " Text = " 取消 " />
</ EditItemTemplate >
< ControlStyle BackColor = " #FFC0C0 " />
</ asp:TemplateField >
</ Columns >
</ asp:GridView >

  方法二(用TemplateField自定义编辑更新删除功能)后台代码

代码
1 protected void Page_Load( object sender, EventArgs e)
2 {
3 if ( ! IsPostBack)
4 {
5 gridview1Bind(); // 因为我们不是自带的编辑功能所以必须放在这里
6  
7 }
8 }
9 private void gridview1Bind()
10 {
11 DataTable dt = sqlhelper.ExecuteQuery( " SELECT * FROM [Products] " , CommandType.Text);
12 GridView1.DataSource = dt;
13 GridView1.DataBind();
14 }
15 protected void GridView1_RowEditing( object sender, GridViewEditEventArgs e) // 触发编辑事件
16   {
17 GridView1.EditIndex = e.NewEditIndex;
18 gridview1Bind();
19 }

 注意方法二gridview1Bind() 不放在ispostback里面的话会报"回发或回调参数无效"这样的错

   方法一可以不放在ispostback里面但方法二必须放在里面否则会报错。

 

你可能感兴趣的:(post)