【问题标题】:Checkbox in Repeater (Categories SubCategories Filtering)中继器中的复选框(类别子类别过滤)
【发布时间】:2016-02-05 14:04:07
【问题描述】:

我尝试使用复选框在转发器中获取两个主要类别,我对此没有任何问题,但是当我尝试在同一个数据库表上获取子类别时(使用 Checkbox.CheckChanged),那么第一个复选框没有响应,但第二个复选框没有任何响应问题。我们该如何解决这种情况?

Checkbox 过滤可能不太好,但仍需要修复。

list.aspx

<asp:Repeater ID="rptcat" runat="server">
      <ItemTemplate>
            <ul>
               <li>
                  <asp:CheckBox ID="main_cat" runat="server" type="checkbox" OnCheckedChanged="main_cat_CheckChanged" AutoPostBack="True" Text='<%# Eval("cat_name") %>' data-id='<%# Eval("cat_id") %>' />                                             
               </li>        
           </ul>
      </ItemTemplate>
</asp:Repeater>

 <asp:Repeater ID="sub_cat" runat="server">
      <ItemTemplate>
            <ul>
                <li>                             
                  <input runat="server" id="subcheck" type="checkbox" class="icheck"  AutoPostBack="True" Text='<%# Eval("cat_name") %>' />                                       
                </li>        
            </ul>
       </ItemTemplate>
</asp:Repeater>

list.aspx.cs

public void bring_cat()
{
    DataSet dscat = conn.bringit("Select * from categories where sub_id=1");
    rptcat.DataSource = dscat.Tables[0].DefaultView;
    rptcat.DataBind();
    subcheck.Visible = false;
}

protected void main_cat_CheckChanged(object sender, System.EventArgs e)
{
    foreach (RepeaterItem aItem in rptcat.Items)
    {
         CheckBox main_cat = (CheckBox)aItem.FindControl("main_cat");
         var id = main_cat.Attributes["data-id"];
         if (main_cat.Checked == true)
         {
              DataSet ds_sub_cat = conn.bringit("Select * from categories where sub_id="+id);
              sub_cat.DataSource = ds_sub_cat.Tables[0].DefaultView;
              sub_cat.DataBind();
              sub_cat.Visible = true;
              subcheck.Visible = true;
          }
          else
          {
              sub_cat.Visible = false;
              subcheck.Visible = false;
          }
    }
}

当我点击主复选框时,我得到 id 号并尝试显示具有此关系的子复选框。

你能看出哪里不对吗?你有更好的主意吗?

【问题讨论】:

    标签: asp.net checkbox webforms repeater asprepeater


    【解决方案1】:

    好的,我解决了我的问题。我希望它对你有帮助。

    如果您尝试直接从复选框中获取 id 号,那么您会发现无法正常工作。解决方法很简单。在中继器或数据列表中的复选框后添加隐藏字段控件,并将 value="

    我认为有一个小错误,这就是我们使用 hiddenfield 的原因。目前这不是最好的方法,但我可以说它有效。

    【讨论】:

      猜你喜欢
      • 2015-02-25
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 2014-07-02
      相关资源
      最近更新 更多