2017-02-03 66 views
0

我有食品名称,如面条,比萨,Coke.If的3复选框任何两个选择,如何在标签盒显示复选框在ASP.NET

Food:<asp:CheckBox ID="CheckBox1" runat="server" Text="Noodles" /> 
     <asp:CheckBox ID="CheckBox2" runat="server" Text="Pizza" /> 
     <asp:CheckBox ID="CheckBox3" runat="server" Text="Coke" /> 
     <br /> 
     <asp:Label ID="Label1" runat="server" Text=""></asp:Label> 
     <br /> 
     <asp:Button ID="Button1" runat="server" Text="Button" onClick="Button1_Click" /> 

所以当如果IAM检查面条和比萨饼,标签1应显示该项目。

+0

请张贴您的代码,显示您的努力到目前为止。运行代码时会得到哪些错误消息?你有什么尝试,你卡在哪里?现在问题看起来,你只是要求我们为你写代码,这不是这个意思。 –

+0

是的,我已经尝试过这样的字符串checkeditem = string.Format(“{0},{1},{2}”,CheckBox1.Checked,CheckBox2.Checked,CheckBox3.Checked);这给了我真实或错误,但不是文字。 – havin

+0

我认为使用CheckBoxList会更好。你的方式,你必须首先检查每一个,如果他们检查:) if(checkbox1.checked)label1.text = checkbox1.text; –

回答

1

如下进行更改,在aspx文件

Food:<asp:CheckBox ID="CheckBox1" runat="server" Text="Noodles" OnCheckedChanged="CheckBox_CheckedChanged" AutoPostBack="true" /> 
    <asp:CheckBox ID="CheckBox2" runat="server" Text="Pizza" OnCheckedChanged="CheckBox_CheckedChanged" AutoPostBack="true"/> 
    <asp:CheckBox ID="CheckBox3" runat="server" Text="Coke" OnCheckedChanged="CheckBox_CheckedChanged" AutoPostBack="true"/> 
    <br /> 
    <asp:Label ID="Label1" runat="server" Text=""></asp:Label> 
    <br /> 
    <asp:Button ID="Button1" runat="server" Text="Button" onClick="Button1_Click" /> 

在你后面的代码(aspx.cs)文件,

protected void CheckBox_CheckedChanged(object sender, EventArgs e) 
    { 
     List<CheckBox> foodCheckBoxList = new List<CheckBox>(); 
     foodCheckBoxList.Add(CheckBox1); 
     foodCheckBoxList.Add(CheckBox2); 
     foodCheckBoxList.Add(CheckBox3); 
     foodCheckBoxList.Where(x => x.Checked).Select(x=>x.Text); 
     Label1.Text = string.Join(",", foodCheckBoxList.Where(x => x.Checked).Select(x => x.Text)); 
    } 

该代码会在你的标签添加文本上的每个复选框的选择。

如果您希望点击按钮,请将上述代码移动到按钮单击事件中,并从aspx网页的每个复选框中移除autopostback属性和CheckBox_CheckedChanged事件。

希望这会有所帮助!

+0

不会有你的复选框的列表,并循环检查检查和建立你的字符串更清洁?如果你的工作量只有3-4个左右,但如果你的数量稍微增加了一点,那么你的代码就会少得多。即使整洁当然会自动通过复选框,但我不太清楚的ASP,所以不知道如何工作,或者如果有任何明显的陷阱... – Koneke

+0

列表 foodCheckBoxList =新列表(); \t \t foodCheckBoxList.Add(CheckBox1); \t \t foodCheckBoxList.Add(CheckBox2); \t \t foodCheckBoxList.Add(CheckBox3); (x => x.Checked).Select(x => x.Text); (x => x.Checked).Select(x => x.Text));}这样,你是这个意思吗? –

+0

感谢您的回答 – havin

1

CheckBoxList集散控制是非常适合您的情况,但既然你说你不能做到这一点,你可以很容易地通过你的控制循环是这样实现的: -

protected void Button1_Click(object sender, EventArgs e) 
{ 
    List<string> selectedFood = new List<string>(); 
    foreach (Control ctrl in form1.Controls) 
    { 
     if (ctrl is CheckBox) 
     { 
      CheckBox chkBox = ctrl as CheckBox; 
      if (chkBox.Checked) 
      { 
       selectedFood.Add(chkBox.Text); 
      } 
     } 
    } 
    Label1.Text = String.Join(",", selectedFood); 
} 

或者它可以简单地做通过使用Linq: -

var selectedFood = form1.Controls.OfType<CheckBox>() 
         .Where(x => x.Checked) 
         .Select(x => x.Text); 

Label1.Text = String.Join(",", selectedFood); 
+0

如果在整个网页中只有三个复选框属于“食物”类别,这是完美的。如果有其他类别的复选框,则该标签将被分配网页中存在的所有复选框文本。顺便说一下,我喜欢你的编码方式。 –

+0

@ AnoopH.N - 是的,但OP从来没有要求过这个要求,为了回答你的问题,这些复选框可以驻留在一个_Container_中,我们可以通过它来循环而不是整个表单。 –