WebPart 中DropDownList 丢失状态 的解决方案

最近比较忙,忙的都没时间更新博客了.

所以今天要一口气写两篇.

WebPart  中DropDownList 丢失状态 的解决方案,十分头痛.

现象就是DropDownList老是为空.

当时有些晕,上网搜了好久,要么没答案,要么含糊其词。

当有些网友说用HiddenField 保存状态给我一些启发,于是我朝HiddenField的方向去想。

原理:HiddenField的是可以直接反映到客户端的且状态值不丢失,用HiddenField的值记录DropDownList的ClientID.
而DropDownList在客户端反映为ID为ClientID的Select域的Form成员。然后当提交时在服务器端获得ID为ClientID的Select域的Form成员
的值即为DropDownList的选中值。

1、用HiddenField的值记录DropDownList的ClientID
     private DropDownList DlistMember = new DropDownList();
        private TextBox txtCNName = new TextBox();
        private Button btnOnboard = new Button();
        private Label lblMessage = new Label();
        private HiddenField hiddenFiled = new HiddenField();      
       
       protected override void Render(System.Web.UI.HtmlTextWriter writer)
        {
                //填充 DlistMember  的数据
                DlistMember.RenderControl(writer)
                btnOnboard.Click += new EventHandler(btnOnboard_Click);
                txtCNName.RenderControl(writer);
                txtCNName.AutoPostBack = false;
                btnOnboard.RenderControl(writer);
                lblMessage.RenderControl(writer); 
                hiddenFiled.Value = DlistMember.ClientID;
                hiddenFiled.RenderControl(writer);
      }  
      protected override void CreateChildControls()//为了加上btnOnboard的Click事件
        {
            btnOnboard.Click += new System.EventHandler(this.btnOnboard_Click);
            DlistMember.EnableViewState = true;
            //DlistMember.EnableTheming = true;
            //DlistMember.AutoPostBack = true;
            this.Controls.Add(DlistMember);
            this.Controls.Add(btnOnboard);
            this.Controls.Add(hiddenFiled);
        }
2、事件处理
    protected void btnOnboard_Click(object sender, EventArgs e)// process btnOnboard click
        {
              string strValue="";
              strValue = hiddenFiled.Value.ToString().Replace("$","_");
              for (int i = 0; i < this.Page.Request.Form.Count; i++)//因为$和_的混淆,这里用遍历Form的域来找到需要的域
                    {
                        string strTemp = this.Page.Request.Form.Keys[i].ToString().Replace("$", "_");
                        if (strTemp == strValue)
                        {
                            strValue = this.Page.Request.Form[i].ToString();
                            isFindFrom = true;
                            break;
                        }
                    }
         }
  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值