【问题标题】:CheckboxList Display All Selected BoxesCheckboxList 显示所有选中的框
【发布时间】:2013-01-02 23:03:43
【问题描述】:

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

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

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

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

  • 营销邮件:是的
  • 第 3 方邮件:是
  • 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 />");

【问题讨论】:

  • 您在代码中的哪个位置检查和/或获取所有已检查的项目。您需要在 ListItems 上使用 foreach 循环,您可能应该在 if(!IsPostBack 中添加一条 Else 语句) 如果您正在执行某种按钮单击以在 __DoPostBack 完成它的工作/页面呈现后查看已检查的项目
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。

标签: c# asp.net checkboxlist


【解决方案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();

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

【讨论】:

  • 明白了,这是有道理的!谢谢,我会解决这个问题的。
  • @kcray 还更新以帮助您提取选定的值...祝你好运:)
  • 再次感谢您的第一个示例通过一次修改运行良好,它需要是 OptList.Items 而不是 OptList.Item。谢谢,为我节省了大量时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
相关资源
最近更新 更多