有关于postback

来源:百度知道 编辑:UC知道 时间:2024/05/24 01:32:26
我发现一个问题
protected void Page_Load(object sender, EventArgs e)
{
ListBox1.SelectedIndex = -1;
ListBox1.DataSource = System.Web.Security.Roles.GetAllRoles();
ListBox1.DataBind();
Label1.Text = "当前站点中有<b>" + ListBox1.Items.Count.ToString() + "</b>个角色";

}
protected void Button1_Click(object sender, EventArgs e)
{
string role=TextBox1.Text;
if (role != "")
{
System.Web.Security.Roles.CreateRole(role);
ListBox1.DataSource = System.Web.Security.Roles.GetAllRoles();
ListBox1.DataBind();
Label1.Text = "当前站点中有<b>" + ListBox1.Items.Count.ToString() + "</b>个角色";
}
}
这段代码,如果我点击button1的话,然后页面应该postback的,我调试了一下,发现编译器显示运行Page_Load()这个函数然后再运行Button1_Click().
这点我很奇怪,我以前一直认为是反过来的呢....这个大家要注意.....<

因为你CreateRole是在Button1的click里面,如果不再次绑定,listbox的值是你第一次在Page_Load里面所赋的值,也就是没有包含新的Role
ListBox1.DataSource = System.Web.Security.Roles.GetAllRoles();
ListBox1.DataBind();
这个实际相对于一个批量复制值到ListBox的过程,而不是真的在列表框和系统的Role之间产生了固定的关联,所以当你的数据源发生变化的时候,如果不手工绑定新值,数据源的变化是不会反应在控件上的