我尝试使用复选框在转发器中获得两个主要类别,我没有问题,但是当我尝试在同一个数据库表上使用子类别时(使用Checkbox.CheckChanged),然后第一个复选框没有响应,但第二个工作没有任何问题问题。我们如何解决这种情况?
Checbox过滤可能不太好但仍需要修复。
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;
}
}
}
当我点击主复选框时,我正在获取身份证号码并试图显示具有此关系的子检查箱。
你能看到什么问题吗?你有更好的想法吗?
答案 0 :(得分:0)
好的,我解决了我的问题。我希望它对你有所帮助。
如果您尝试直接从复选框获取ID号,那么您可以看到效果不佳。解决方案很简单。在转发器或datalist中的复选框后添加隐藏的字段控件,并设置值=&#34;&lt; #Eval(&#34; cat_id&#34;)&#34;到身份证号码。现在,您可以从后面的代码中获取ID号,而不会有任何计数问题。
我认为没有什么bug,这就是我们为什么要使用hiddenfield的原因。它现在不是最好的方式,但我可以说它正在发挥作用。