• asp:CheckBox后台获取不到前台的Checked属性


    今天在测试程序的时候,碰到了这种现象:

    后台代码:

                for (int i = 0; i < this.GvCourses.Rows.Count; i++)
                {
                    CheckBox chb = this.GvCourses.Rows[i].FindControl("CheckB") as CheckBox;
                    if (chb.Checked)
                    {
                        strDelete += "," + this.GvCourses.Rows[i].Cells[0].Text;
                    }
                }
    

      前台:

     <asp:GridView ID="GvCourses" runat="server">
                                <Columns>
                                    <asp:BoundField HeaderText="ID" DataField="ID" HeaderStyle-CssClass="hide" FooterStyle-CssClass="hide"
                                        ItemStyle-CssClass="hide">
                                        <FooterStyle CssClass="hide"></FooterStyle>
                                        <HeaderStyle CssClass="hide"></HeaderStyle>
                                        <ItemStyle CssClass="hide"></ItemStyle>
                                    </asp:BoundField>
                                    <asp:TemplateField>
                                        <HeaderTemplate>
                                            选择
                                        </HeaderTemplate>
                                        <ItemTemplate>
                                            <asp:CheckBox runat="server" ID="CheckB" />
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:BoundField HeaderText="序号" HtmlEncode="false" />
                                    <asp:BoundField HeaderText="课程名称" DataField="C_NAME" />
                                    <asp:BoundField HeaderText="单元类型" DataField="T_ID" />
                  .
                  .
                  .
    </Columns>
    </GridView>
    

      但在执行时,不管怎么弄,就是执行不到 if (chb.Checked)  { strDelete += "," + this.GvCourses.Rows[i].Cells[0].Text;   } 这里面的东西,换句话说就是chb的checked始终为false;而另一出的却始终能执行。

      于是我采用了方法一:清理了解决方案,重新编译,不行;

          另一处checkbox的名字为“CheckBox1”, 我以为是名字的问题,

          于是我采用了方法二:将此处的所有名字重新命名为CheckBox1, 清理解决方案,再次编译执行,还是不行;

          这时采用了以前小时候经常用的终极方法:开始抱怨。

           我在想是不是微软又产生了Bug。两处的代码我都已经复制成相同的样子了,还要怎样? 到底要怎样啊?

         而当我静下心来想的时候,认为我产生错误的几率比微软产生Bug的几率要大,因为这个错误太明显太致命了。 于是我在检查分析;发现我每次执行后台的时候页面都有一闪,然后才执行后台,而且不管我选择多少个,后台都不会给strDelete赋值。

          于是我得出: 服务器控件在执行后台代码时都会postback一次;

          终于发现,问题在这:

      protected void Page_Load(object sender, EventArgs e)
            {
                    this.lb_message.Text = "";
              
                    bindGrid();
                    InitDropDownList();
              }
    
    
    应该为:
      protected void Page_Load(object sender, EventArgs e)
            {
                this.lb_message.Text = "";
                if (!IsPostBack)
                {
                    bindGrid();
                    InitDropDownList();
                }
            }
    

      做了上面修改时,问题解决。

          每个出现的问题,都体现了自己一些知识的不足,对操作的原理还不是很了解。以后更应该虚心求教。

  • 相关阅读:
    进程管理supervisor的简单说明
    flask扩展系列之
    爱奇艺面试Python,竟然挂在第5轮…(转)
    RabbitMQ最佳实践
    Linux生成私钥和公钥免密连接
    mongo 慢查询配置
    监控Mongo慢查询
    关于SIGSEGV错误及处理方法(转)
    深入理解JVM内幕(转)
    libpng使用
  • 原文地址:https://www.cnblogs.com/crazylight/p/2519914.html
Copyright © 2020-2023  润新知