zoukankan      html  css  js  c++  java
  • 获取不到Repeater控件中的CheckBox选中状态

    写在前面的话:在做一个项目的时候,需要使用到Repeater控件,并且在Repeater控件内放置了CheckBox控件来标志需要删除的行,选中后,在后台取到的CheckBox的值总是为false。最后发现是在PageLoad函数中没有判断是否是回发就绑定了Repeater控件的数据,那么每次进入页面CheckBox控件的值当然被刷新为false了。

    前台页面:

     1 <div class="contianer p10">
     2         <h3>
     3             当前位置:<a href="Index.aspx" target="_self" >首页</a>>文章管理</h3>
     4         <hr/>
     5         <div class="content">         
     6                 <asp:repeater ID="rptArticle" runat="server" ClientIDMode="Static" >
     7                 <HeaderTemplate>
     8                 <table border="0" cellspacing="0" cellpadding="0" width="100%">
     9                     <tr>
    10                         <th width="6%">选择</th>
    11                         <th width="6%">编号</th>
    12                         <th align="left">文章标题</th>
    13                         <th width="16%">发布时间</th>
    14                         <th width="10%">操作</th>
    15                     </tr>
    16                     </HeaderTemplate>
    17                     <ItemTemplate>
    18                         <tr>
    19                             <td><asp:CheckBox ID="cb_id" CssClass="checkall" runat="server" /></td>
    20                             <td><asp:Label ID="lb_id" runat="server" Text='<%#Eval("aNo")%>'></asp:Label></td>
    21                             <td><a href="ArticleShow.aspx?id=<%#Eval("aNo") %>"><%#Eval("aTitle")%></a></td>
    22                             <td><%#string.Format("{0:g}", Eval("aDate"))%></td>
    23                             <td><span><a href="ArticleShow.aspx?id=<%#Eval("aNo") %>">修改</a></span></td>
    24                         </tr>
    25                     </ItemTemplate>
    26                     <FooterTemplate>
    27                     </table>
    28                     </FooterTemplate>
    29                 </asp:repeater>
    30         </div>
    31         <div class="clear"></div>
    32           <!-- 分页控件 -->
    33           <div>
    34             <webdiyer:AspNetPager ID="AspNetPager1" runat="server" HorizontalAlign="Right" ShowCustomInfoSection="Right"
    35                 Width="100%" Style="font-size: 12px" inputboxstyle="19px" CustomInfoHTML=""
    36                 ShowPageIndexBox="Always" AlwaysShow="false" FirstPageText="首页" LastPageText="尾页"
    37                 NextPageText="下一页" PrevPageText="上一页" CustomInfoStyle="FONT-SIZE: 12px" CurrentPageButtonClass="pagination"
    38                 PageSize="16" ForeColor="#1460AD" OnPageChanged="AspNetPager1_PageChanged">
    39             </webdiyer:AspNetPager>
    40           </div>
    41           <!-- 分页控件end -->
    42 
    43         <br />
    44         <asp:Button ID="BtnDelete" runat="server" 
    45         OnClientClick="return confirm( '确定要删除这些记录吗? ');" 
    46         onclick="BtnDelete_Click" Text="删除" />
    47     &nbsp;
    48         <asp:Label ID="lbMsg" runat="server" Text=""></asp:Label>
    49         &nbsp;
    50         <asp:Button ID="BtnAdd" runat="server" Text="添加" 
    51             onclick="BtnAdd_Click"/>
    52 
    53     </div>

    后台页面:

     1 ArticleBLL bll = new ArticleBLL();
     2         protected void Page_Load(object sender, EventArgs e)
     3         {
     4             this.lbMsg.Text = "";
     5             if (!IsPostBack)
     6             {
     7                 BindRepeater();
     8             }
     9         }
    10         // 绑定数据
    11         private void BindRepeater()
    12         {
    13             string strSql = "select * from article";
    14 
    15             PagedDataSource ps = new PagedDataSource();
    16             ps.DataSource = bll.GetDataList(strSql).DefaultView;
    17             AspNetPager1.RecordCount = ps.Count;
    18             ps.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;
    19             ps.AllowPaging = true;
    20             ps.PageSize = AspNetPager1.PageSize;
    21             this.rptArticle.DataSource = ps;
    22             this.rptArticle.DataBind();
    23         }
    24         // 分页控件事件绑定
    25         public void AspNetPager1_PageChanged(object sender, EventArgs e)
    26         {
    27             BindRepeater();
    28         }
    29         // 添加文章
    30         protected void BtnAdd_Click(object sender, EventArgs e)
    31         {
    32             Response.Redirect("ArticleShow.aspx");
    33         }
    34         // 删除
    35         protected void BtnDelete_Click(object sender, EventArgs e)
    36         {
    37             for (int i = 0; i < rptArticle.Items.Count; i++)
    38             {
    39                 int id = Convert.ToInt32(((Label)rptArticle.Items[i].FindControl("lb_id")).Text);
    40                 CheckBox cb = (CheckBox)rptArticle.Items[i].FindControl("cb_id");
    41                 if (cb.Checked)
    42                 {
    43                     bll.Delete(id.ToString());
    44                 }
    45             }
    46             this.lbMsg.Text = "删除成功";
    47         }

    处理办法是在PageLoad里面判断是否是回发就可以了。

  • 相关阅读:
    Linux中常用操作命令
    JQuery Each循环遍历每个元素
    get set
    Launch Screen在iOS7/8中的实现
    程序猿必备的Git教程
    浏览器的工作原理:新式网络浏览器幕后揭秘
    浏览器的工作原理:新式网络浏览器幕后揭秘
    游览器中javascript的执行过程
    游览器中javascript的执行过程
    浅析 Cordova for iOS
  • 原文地址:https://www.cnblogs.com/lit10050528/p/3738641.html
Copyright © 2011-2022 走看看