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里面但方法二必须放在里面否则会报错。