相信大家都在开始学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,相信大家都理解了吧,哈哈哈哈
{
DropDownList1.Items.Add("这是当选中DropDownList时添加的一项");
}
{
DropDownList1.Items.Add("按钮添加一项");
}
无论点击多少次,都只有一项内容
这是因为把DropDownList的EnableViewState属性改为了false,把它改为true之后,再次运行就是我们想要的结果。。why????
是这样的,我们在浏览器页面中所填写的信息最终都会交给服务器处理,在客户端浏览器和服务器中间有一个_VIEWSTATE的一种机制,每次客户端向服务器发信息都要连同_VIEWSTATE里面保存的信息一起发给服务器,服务器接收到信息后然后处理。我们打开网页的"查看源"如下: