Page_Load里 进行dropdownlist的数据绑定
for (int i = 0; i < 10; i++)
{
DropDownList1.Items.Add(new ListItem(i.ToString()));
}
另有一个button获取其值
protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Write(DropDownList1.SelectedValue);
    }可是如果禁用了viewstate的话,是获取不到值的...
大家都怎么解决的?不想打开viewstate

解决方案 »

  1.   

    上面好象没有用到viewstate,有点不明白你要问的问题
      

  2.   

    禁用了viewstate的话,就禁止修改,控件就不允许改变.当然就取不到值了..
      

  3.   

    @sendling(心随我动)
    试一下就知道了嘛...禁用viewstate..
    @symbol441(≮西门潇洒≯) 
    嗯,是取不到值...我想问问如何解决这个问题?
      

  4.   

    可是如果禁用了viewstate的话,是获取不到值的..
    ========
    你取不到值?我为什么可以呢?实际上即使你禁用ViewState的,也是可以的,
    因为 DropDownList 实现了 IPostBackDataHandler ,其 SelectedValue 是每次回发都会回串的,并且保持选中状态只是,你这段代码本身逻辑上就有问题,
    Button1_Click 再 Page_Load 之后执行,那么 Button1_Cllick 获取的永远是第一项的值
      

  5.   

    哦..对,对 不是获取不到值,是获取的永远是第一项。。
    那么这个如何解决呢??必须要在page-load里绑定dropdownlist的数据的嘛...
      

  6.   

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        { 
        //绑定 dropdownlist
        }
    }
      

  7.   

    那么这个如何解决呢??必须要在page-load里绑定dropdownlist的数据的嘛...
    ========
    如果你要动态的添加项,并且又要禁用 ViewState,那么不能再  Load 阶段 处理,在 Init 阶段void Page_Init(object sender, EventArgs e)
        {        
            for (int i = 0; i < 10; i++) {
                DropDownList2.Items.Add(new ListItem(i.ToString(), i.ToString()));
            }
        }当你禁用 ViewState 之后,页面回发之间不维护控件状态,那么你得确保,动态添加的代码每次
    都能够执行,并且为了等到Post回来的值,只有在 Init 阶段或者更高处理, 因为 IPostBackDataEventHandler 接口中加载回发数据在 Load 之前完成
      

  8.   

    此问题,实际上涉及 ASP.NET 的多方面内部机理,包括 ASP.NET 页生命周期, ViewState 内部原理,数据回传(IPostBackDataEventHandler 接口)等等
      

  9.   

    泡了一个月多的 CSDN,忍不住发点牢骚 :D因为你不了解这些机制,想当然去coding,反而把问题复杂化了,
    如果你按最常规的处理方式,如直接以声明的方式直接往 .aspx 添加静态项,或者是绑定数据,或者启用了ViewState,不回又这些问题,因为这些“常规”方法都是遵循的我上面提的那些机制,没有冲突。看来,
    一方面,的确是 MS 惹的祸啊,把很多东西包装起来了,是方便了使用,降低了门槛,但是方便也就意味着某种程度上,做起来有点“傻瓜”,特别碰到非一般需求的时候,往往无法达到我们满意的效果。同时,但对于初学者,往往有点“浮”,总是渴望着“一步到位”,
    哪些被 ASP.NET 隐藏的底层机理,如最基本的 HTTP 请求规范,html form 表单提交机理,没不熟悉,更不知道从何获取这些东东。
    就像,很多初学者都提出,2。0中 xxxDataSource 好不好呢?与直接手动 DataBind 影响性能不?实际上如果你了解 ADO.NET 与 WebControl,那么很多可以得出这几点:
    1。xxxDataSource 确实好,我个人认为,确实可以到达之前 ASP.NET Team 夸的提高 75% 以上的开发效率
    2。性能?这与控件本身没有关系, xxxDataSource 内部也是调用的诸如 GridView.DataBind()方法来绑定数据, SelectCommand UpdateCommand  的SQL 或者SP依然是你提供了(只是提供了Wizard快速生成而已,高级的代码还是要你动手),封装了 ADO.NET 的常规步骤(如 new Connnection Open ExectueReader DataAdapert.Fill Connnection.Close 等等)
    3。灵活性不好。什么东西都被你 xxxDataSource 完成了,那我敢什么?因此,对于初学者,特别是项目周期紧的,完成功能才是王道。管它性能怎么样,让它泡起来才是。当然这个前提是,你不能给自己埋定时炸弹,基本常识知道。如你 Open 了一个 Connection,记得我必须关闭这个 Connection。不过你放心,像 xxxDataSOurce 帮你生成的代码,你就放心用吧,人家是产品,自己是经过确认测试的。
    说道这里,想到哪个老生畅谈的分页问题,还有那个涉及点 ajax 的js 相关问题,一有人问,楼下马上丢一句 “存储过程分页 吧”, “AJAX 吧”,好像他们才是万能,确实当到达某个瓶颈是,然后多数情况传统方法足以满足要求。
      

  10.   

    支持```````
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        { 
        //绑定 dropdownlist
        }
    }
      

  11.   

    Jinglecat(晓风残月 >> 问题需简洁,错误要详细 已经说的很全了
      

  12.   

    嗯,谢谢Jinglecat确实是这样的...许多底层一些的、原理之类的确实不懂..会努力去看的..
    但是因为要做出东西来..没办法,只好冒昧来问了PS:if (!IsPostBack)
    这样是不好用的...这个早就试过了的...
      

  13.   

    同意amandag(高歌)
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        { 
        //绑定 dropdownlist
        }
    }
      

  14.   

    Page_Load里   进行dropdownlist的数据绑定 
    for   (int   i   =   0;   i   <   10;   i++) 

    DropDownList1.Items.Add(new   ListItem(i.ToString())); 

    另有一个button获取其值 
    protected   void   Button1_Click(object   sender,   EventArgs   e) 
            { 
                    Response.Write(DropDownList1.SelectedValue); 
            } 可是如果禁用了viewstate的话,是获取不到值的... 
    大家都怎么解决的?不想打开viewstate
    -------------------------------------------------------------------------
    禁用viewstate后,你试试this.Request[this.DropDownList1.UniqueID],这个值就是DropDownList1的SelectedValue,但是取不到dropDownList1的text值,如果需要可以考虑自己添加一个隐藏域hiddenfield来维护它的text值