如何从asp.net中的checkboxlist控件返回所选项目

我试图在字符串中返回动态绑定的复选框列表控件中的选定项目,没有运气。 我希望有人可以提供帮助。 在我的代码隐藏文件中,我正在连接一个名为users的类并构建一个数据表。 然后我将数据表绑定到cblist控件

private void populateUserList() //called on page load { SubmitOptions mySubmission = new SubmitOptions(juris, rptType, tmplName); if (mySubmission.Users.Count == 0) { lbl_juris.Visible = false; cb_selectUser.Visible = false; lbl_AlertMsg.Visible = true; btnSelect.Visible = false; lbl_AlertMsg.Text = "No supervisors listed for jursidiction: " + juris.ToString(); } else { dt.Columns.Add("Users"); for (int i = 0; i < mySubmission.Users.Count(); i++) { DataRow dr = dt.NewRow(); dr["Users"] = mySubmission.Users[i]; dt.Rows.Add(dr); } cb_selectUser.DataSource = dt; cb_selectUser.DataBind(); } } 

在主aspx文件中,我将控件定义为:

   

我尝试了下面的代码,我在列表中进行了迭代,但只有当我将值硬编码到Checkboxt列表中作为listitems时,这似乎才有效。

  protected void btn_returnUserList(object sender, System.Web.UI.ImageClickEventArgs e) { for (int i = 0; i < cb_selectUser.Items.Count; i++) { if (cb_selectUser.Items[i].Selected) { selectedUsers += cb_selectUser.Items[i].Text; } } 

列表填充正常,我想要做的就是从复选框列表控件中以字符串forms返回所有选定的用户。

正如我所说,如果我将项值硬编码到控件中,上面的代码可以工作,我可以在字符串中看到所选项,但是删除itemslist标签并切换到绑定nothign。 上面的方法计算了整个返回数,但是没有返回任何选择。

任何有关我缺少的提示或建议将不胜感激。

这里是完全按照您的意愿工作的完整页面代码。 只需添加一个CheckboxList,将其命名为list1,将一个按钮名称添加到btn并添加一个标签并将其命名为lbl。

 protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { var dt = new DataTable(); dt.Columns.Add("Users"); const string str = "User {0}"; for(var i=1;i<=10;i++) { //var r = dt.NewRow(); //r.ItemArray=new object[]{string.Format(str,i)}; dt.Rows.Add(new object[] {string.Format(str, i)}); } list1.DataSource = dt; list1.DataTextField = "Users"; list1.DataBind(); } } protected void btn_Click(object sender, EventArgs e) { var s = list1.Items.Cast() .Where(item => item.Selected) .Aggregate("", (current, item) => current + (item.Text + ", ")); lbl.Text = s.TrimEnd(new[] {',', ' '}); } 

你确定populateUserList()只被调用一次吗? (即不在回发上)。 如果它被调用两次,则所选项目集合将为空白。

 protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { populateUserList(); } } 

1-下载Jquery.json.js并将其作为参考添加到您的视图中:

  2- I've added a ".cssMyClass" to all checkboxlist items so I grab the values by their css class:  

3-正如您所看到的,我已将所有选定的值添加到数组中,并且我已通过ajax 4-将其传递给“Home”控制器的“Save”操作,您可以通过添加数组作为参数来接收值:

  [HttpPost] public ActionResult Save(int[] val) { 

我搜索得太多,但显然这是唯一的解决方案。 如果您找到更好的解决方案,请告诉我。

  string skills=""; for(int i=0;i 

在尝试从中检索值之前,您需要确保您的checkboxlist具有数据绑定。

您可以使用发件人检索您选择的项目,看看您是否得到相同的结果?

 protected void btn_returnUserList(object sender, System.Web.UI.ImageClickEventArgs e) { CheckBoxList cbl = sender as CheckBoxList; if (sender == null) { throw new Exception("Sender is not a CheckBoxList"); } for (int i = 0; i < cbl.Items.Count; i++) { if (cbl.Items[i].Selected) { // Also, set a breakpoint here... are you hitting this line? selectedUsers += cbl.Items[i].Text; } } 

另外,测试你是否进入选定项目的块...他们是否注册为选中,但没有收回文本? 或者首先没有显示所选项目?

试试这个: –

  foreach (ListItem li in cb_selectUser.Items) { //Your Code } 

我有同样的问题。 您必须按如下方式绑定CheckBoxList

 if(!IsPostBack) { //Bind your checkboxlist }