簡體   English   中英

如何從asp.net中的checkboxlist控件返回所選項目

[英]How to return selected items from checkboxlist control in asp.net

我試圖在字符串中返回動態綁定的復選框列表控件中的所選項目,沒有運氣。 我希望有人可以提供幫助。 在我的代碼隱藏文件中,我正在連接一個名為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文件中,我將控件定義為:

<asp:CheckBoxList ID="cb_selectUser"
       Width="400px" 
       Height="100%"
       AutoPostBack="false"  
       runat="server"  
       CellPadding="2"  
       CellSpacing="5"
       DataTextField="Users" 
       DataValueField="Users"
        >
        </asp:CheckBoxList>

我嘗試了下面的代碼,我在列表中進行了迭代,但這似乎只有當我將值硬編碼到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;
            }
        }

列表填充正常,我想要做的就是從復選框列表控件中以字符串形式返回所有選定的用戶。

正如我所說,如果我將項目值硬編碼到控件中,上面的代碼可以工作,我可以看到字符串中的選定項目,但是刪除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<ListItem>()
                   .Where(item => item.Selected)
                   .Aggregate("", (current, item) => current + (item.Text + ", "));
            lbl.Text = s.TrimEnd(new[] {',', ' '});
        }
   string skills="";
   for(int i=0;i<chkboxlist.Items.Count;i++)
   {
       if(chkboxlist.Items[i].Selected)
       {
           skills=skills+chkboxlist.Items[i].Text+",";
       }
   }
   skills = skills.Remove(skills.Length-1);
   lblResult.Text = skills.ToString();

你確定populateUserList()只被調用一次嗎? (即不在回發上)。 如果它被調用兩次,則所選項目集合將為空白。

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

1-下載Jquery.json.js並將其作為參考添加到您的視圖中:

<script src="../../Scripts/jquery.json.js" type="text/javascript"></script>
2- I've added a ".cssMyClass" to all checkboxlist items so I grab the values by their css class: 


 <script type="text/javascript" >
       $(document).ready(function () {
           $("#btnSubmit").click(sendValues);
         });

         function populateValues()
         {
             var data = new Array();
             $('.myCssClas').each(function () {
                 if ($(this).attr('checked')) {
                     var x = $(this).attr("value");
                     data.push(x);
                 }
             }); 

             return data;
         }

         function sendValues() {
             var data = populateValues();
                   $.ajax({
                       type: 'POST',
                       url: '@Url.Content("~/Home/Save")',
                       data: $.json.encode(data),
                       dataType: 'json',
                       contentType: 'application/json; charset=utf-8',
                       success: function () { alert("1"); }
                   });

           } 



     </script>

3-正如您所看到的,我已將所有選定值添加到數組中,並通過ajax 4-將它傳遞給“Home”控制器的“Save”操作,您可以通過添加數組作為參數來接收值:

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

我搜索得太多,但顯然這是唯一的解決方案。 如果您找到更好的解決方案,請告訴我。

您是否可以使用發件人檢索所選項目並查看是否獲得相同的結果?

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;
        }
    }

另外,測試你是否進入選定項目的塊...他們是否注冊為選中,但沒有收到文本? 或者首先沒有顯示所選項目?

在嘗試從中檢索值之前,您需要確保您的checkboxlist具有數據綁定。

試試這個: -

    foreach (ListItem li in cb_selectUser.Items)

   {
       //Your Code
   }

我有同樣的問題。 您必須按如下方式綁定CheckBoxList

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM