【问题标题】:How should i collect checkbox info into asp.net我应该如何将复选框信息收集到 asp.net
【发布时间】:2014-10-27 16:21:31
【问题描述】:

我有自己编写的网格,需要在单击提交按钮后收集有关项目复选框的信息。

<form id="form1" runat="server">
    <div>
    <asp:Repeater id="fields" runat="server">

<HeaderTemplate>
<table>
    <tr><td><h3>Fields Info</h3></td><td><h3>Check</h3></td></tr>
</HeaderTemplate>

<ItemTemplate>
 <tr><td><asp:Label runat="server" 
                    text=<%# Eval("Field")%> /></td><td><asp:CheckBox runat="server" /></td></tr>
</ItemTemplate>

<FooterTemplate>
</table>
</FooterTemplate>

</asp:Repeater>
<asp:Button runat="server" Text="Submit"/>

请帮忙!

【问题讨论】:

    标签: asp.net checkbox


    【解决方案1】:

    什么样的信息?如果你想在中继器中找到你所有的CheckBoxes,你应该给他们一个ID并使用RepeaterItem.FindControl("TheID")。或者你可以循环所有项目并使用Controls.OfType&lt;CheckBox&gt;:

    var allCheckBoxes =  fields.Items.Cast<RepeaterItem>()
        .Select(item => new { 
            Label    = item.Controls.OfType<Label>().First(),
            CheckBox = item.Controls.OfType<CheckBox>().First()
        });
    

    现在你可以循环它们了:

    foreach(var x in allCheckBoxes)
    {
        Console.WriteLine("Label: {0} checked: {1}", x.Label.Text, x.CheckBox.Checked ? "yes" : "no");
    }
    

    或者只获取选中的:

    var checkedOnly = allCheckBoxes.Where(x => x.CheckBox.Checked);
    foreach(var x in allCheckBoxes){
        //...
    }
    

    【讨论】:

    • 在这种情况下,有关复选框的信息(选中,未选中)在 UI 更改后不会更改
    • @IgorDemyanenko:在什么的情况下它不会改变?
    • 更改 UI 并点击提交按钮后
    • @IgorDemyanenko:它确实,所以还有其他问题。也许您在每次回发时都对转发器进行数据绑定,而不仅仅是一次。使用!Page.IsPostBack-检查。如果这没有帮助,您必须显示一些代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2018-08-28
    • 1970-01-01
    • 2012-01-10
    相关资源
    最近更新 更多