dropdownlist动态绑定viewstate禁用后取值

一直对asp.net页面周期了解得很少,尤其是一些底层机制,也一直将过且过,今天看到有个问题

就是禁用viewstate后DropDownList取不到值(DropDownList动态绑定的,不是前台赋值),自己测试了下也确实取不到。

然后网上找了下资料,其实是取得到的,只是逻辑不对

以下是摘自csdn-Jinglecat(晓风)的话

实际上即使你禁用ViewState的,也是可以的,
因为DropDownList实现了IPostBackDataHandler   ,其   SelectedValue 是每次回发都会回串的,并且保持选中状态

那么这个如何解决呢??必须要在page-load里绑定dropdownlist的数据的嘛...
========
如果你要动态的添加项,并且又要禁用   ViewState,那么不能再     Load   阶段   处理,在   Init   阶段

代码
void Page_Init(object sender, EventArgs e)
    {
        Bind();
    }
    
public void Bind()
    {
        
using (SqlConnection conn = new SqlConnection())
        {
            conn.ConnectionString 
= ConfigurationManager.ConnectionStrings["DropDownConnection"].ConnectionString;
            conn.Open();
            SqlCommand cmd 
= new SqlCommand("select * from province", conn);
            DropDownList1.DataSource 
= cmd.ExecuteReader();
            DropDownList1.DataTextField 
= "name";
            DropDownList1.DataValueField 
= "id";
            DropDownList1.DataBind();
        }
    }

 

当你禁用   ViewState   之后,页面回发之间不维护控件状态,那么你得确保,动态添加的代码每次
都能够执行,并且为了等到Post回来的值,只有在   Init   阶段或者更高处理,   因为   IPostBackDataEventHandler   接口中加载回发数据在   Load   之前完成 

 

确实很有必要要看一下页面周期!

现在就开始奋斗!

 

posted @ 2010-10-08 14:42  蓝丶 sky  阅读(856)  评论(3编辑  收藏  举报