CheckboxList显示所有选定的框

时间:2013-01-02 23:03:43

标签: c# asp.net checkboxlist

我提交表单并收到一封电子邮件,说明表单的结果,在这种情况下,如果已选中三个复选框中的任何一个,则会显示。我当前的问题是,如果选中多个复选框,则不会显示第二个或第三个复选框被选中。

示例:我检查了所有三个复选框,结果是:

  • 营销邮件:是
  • 第三方邮件:否
  • VISA促销:否

什么时候应该显示所有人都这样说:是

  • 营销邮件:是
  • 第三方邮件:是
  • VISA促销:是

我的首页代码:

<td class="nobor">
        <asp:CheckBoxList ID="OptList" runat="server">
        </asp:CheckBoxList>

我的页面加载:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            OptList.Items.Add(new ListItem("Marketing Mailings", "1"));
            OptList.Items.Add(new ListItem("3rd Party Mailings", "2"));
            OptList.Items.Add(new ListItem("VISA Promotions", "3"));
        }

在我创建电子邮件正文的Submit_Click中:

sb.Append("<u>Opt-Out Preference</u><br/>");

if (OptList.SelectedItem.Value == "1") sb.Append("<b>Marketing Mailings:</b>&nbsp;Yes<br />");
else sb.Append("<b>Marketing Mailings:</b>&nbsp;No<br />");

if (OptList.SelectedItem.Value == "2") sb.Append("<b>3rd Party Mailings:</b>&nbsp;Yes<br />");
else sb.Append("<b>3rd Party Mailings:</b>&nbsp;No<br />");

if (OptList.SelectedItem.Value == "3") sb.Append("<b>VISA Promotions:</b>&nbsp;Yes<br />");
else sb.Append("<b>VISA Promotions:</b>&nbsp;No<br />");

1 个答案:

答案 0 :(得分:1)

SelectedItem将返回一个项目,而不是所有项目 您应该将代码修改为以下内容:

if (OptList.Items[0].Selected) sb.Append("<b>Marketing Mailings:</b>&nbsp;Yes<br />");
else sb.Append("<b>Marketing Mailings:</b>&nbsp;No<br />");

if (OptList.Items[1].Selected) sb.Append("<b>3rd Party Mailings:</b>&nbsp;Yes<br />");
else sb.Append("<b>3rd Party Mailings:</b>&nbsp;No<br />");

...等 请注意,我正在检查每个项目是否已选中,而不是SelectedItem值。

另一种选择是遍历所有项目并找到所选项目:

var ListOfSelectedValues = OptList.Items.Cast<ListItem>().Where(x => x.Selected).Select(x => x.Value).ToList();

这将返回已选择的所有的列表...