zoukankan      html  css  js  c++  java
  • 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();
                }
            }
    

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

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

  • 相关阅读:
    初识python 2.x与3.x 区别
    装饰器
    函数的进阶
    Spring Boot启动问题:Cannot determine embedded database driver class for database type NONE
    22.Spring Cloud Config安全保护
    23.Spring Cloud Bus 无法更新问题(踩坑) Spring cloud config server Could not fetch remote for master remote
    24.Spring Cloud之Spring Cloud Config及Spring Cloud Bus
    Spring Boot整合Spring Data Elasticsearch 踩坑
    项目中Spring Security 整合Spring Session实现记住我功能
    32.再谈SpringBoot文件上传
  • 原文地址:https://www.cnblogs.com/crazylight/p/2519914.html
Copyright © 2011-2022 走看看