为了避免按钮点击再次执行Pa…

首先说点:
protected void Page_Load(object sender, EventArgs e)
{
if(!this.IsPostBack)
{
........
}
}
[转载]为了避免按钮点击再次执行Page_Load()中的代码,IsPostBac
  IsPostBack是页面类的一个属性,针对按钮的,确切的说是针对按钮提交功能(按钮默认是submit的)的,当按钮点击的时候IsPostBack属性为True一取反,为False,if条件判断一旦为False,就不执行Page_Load中的代码,页面的加载顺序要理解:首先页面是一个类类只有实例化出来才能使用里面的方法和属性,所以页面一加载,(1)首先执行的是页面类的构造函数,构造函数一执行完毕,这个页面类就实例化出来,(2)然后调用Initial方法,把页面中的所有用到的控件都实例化出来(注意页面中的每一个控件也是一个对象,一个变量),当点击按钮的click事件,所要写的后台方法,就是按钮这个类中的方法和属性,只有当页面实例化完毕的时候才能够调用。所以按钮点击的操作的执行要晚于Page_Load()方法,当页面的控件实例化完毕以后,才执行Page_Load()方法,这个时候该为实例化完毕的控件绑定数据执行控件数据显示操作。按照这个逻辑,页面一加载的时候这样(不写if(!IsPostBack))做是没问题的,但是如果一旦加上按钮,比如说一个修改页面,如果加载完毕数据的时候,一点点击修改按钮,就会向我们上面提到的,首先是实例化页面这一个类,因为默认From表单时提交到页面自身页面实例化完毕,页面中的控件生成完毕,又来执行一遍Page_Load()方法绑定控件中的显示数据,Page_Load()方法时为控件塞进数据的,这样把查出来的数据又放进生成好的控件中了,当在执行修改按钮方法的时候,控件中的值已经不再是刚才输入的值了,经过了Page_Load()方法执行,控件中的值还是从数据库中查出来的数据,这样就无法把修改的数据送回到数据库中,为了避免按钮提交的时候执行Page_Load()中的代码,于是加上一句:if(!IsPostBack),IsPostBack从字面上理解是提交回来的意思,如果为True,说明是按钮提交回来的,一取反为False,不执行if条件判断后面的代码,如果是刷新页面,或者是跳转到这个页面中,就不是提交回来的操作了,IsPostBack就为False,一取反为True,就会执行if条件判断后面的代码了。在页面的后台类中只要是有按钮就必须要加上if(!IsPostBack){}判断。
上面图片的饿字体太模糊,看看这个清晰吗:
[转载]为了避免按钮点击再次执行Page_Load()中的代码,IsPostBac

[转载]为了避免按钮点击再次执行Page_Load()中的代码,IsPostBac

OK!

DropDownList控件的一系列的属性和如何来获取DropDownList控件选中项的Value值,和为DropDrownList控件指定选中项,如何生成DropDownList控件中的每一项(通过for循环、通过DataSource指定数据源):
DropDownList
为什么DropDownList在绑定的时候比Repeater绑定时候复杂,需要指定DataTextField和DataValueField,而Repeater不需要指定而是直接绑定,因为Repeater只是用来显示字段值,而没有Value值,DropDownList的每一项既有DataTextField也有DataValueField。
属性:
Items:下拉列表中的项的集合
DataTextField:下拉列表的Text显示值
DataValueField:下拉列表的Value值
SelectedValue:下拉列表选中项的Value值
SelectedItem:下拉列表的每一项(一个对象)
SelectedIndex:下拉列表选中项的索引号
AppendDataBoundItems:是否追加项,bool类型,在绑定数据的基础上追加ListItem。
应用:
1.添加项:
1)设计时添加
2)用代码添加(利用foreach循环或for循环添加、利用DataSource指定数据源的方式添加)
方法一:
private void Show()
     {
        HR.NationDataTable table = new HR.NationDataTable();
        NationTableAdapter adapter = new NationTableAdapter();
        table = adapter.GetData();

        DropDownList1.Items.Clear();
//利用foreach循环为下拉列表的每一项赋值,foreach循环前面是集合中每一行数据的类型,后面是所遍历的集合
        foreach (HR.NationRow row in table.Rows)
        {
            ListItem li = new ListItem(row.Name,row.Code);
            DropDownList1.Items.Add(li);
        }
    }
    方法二:
    private void Show()
    {
        HR.NationDataTable table = new HR.NationDataTable();
        NationTableAdapter adapter = new NationTableAdapter();
        table = adapter.GetData();

        DropDownList1.DataSource = table;
        DropDownList1.DataTextField = "Name";
        DropDownList1.DataValueField = "Code";
        DropDownList1.DataBind();
    }
    2.取得选中项的Value值
    Label1.Text = DropDownList1.SelectedValue;//直接取得DropDownList的Value值,这种情况最常用。
    //Label1.Text = DropDownList1.SelectedItem.Value;//根据下拉列表的选中项取得下拉列表选中项的Value值,首先取得下拉列表的选中项对象,然后取得此对象的Value属性即为选中项的Value值。
    //Label1.Text = DropDownList1.Items[DropDownList1.SelectedIndex].Value;//根据下拉列表选中项的索引号取得下拉列表的选中项的Value值。
    
    3.定位下拉列表选中项(为下拉列表的选中项赋值)
    DropDownList1.SelectedValue = "某个值";//定位下拉列表,为DropDownList的SelectedValue赋值。




(完)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值