Hi, 
I am using RadListBox with checkboxes for user to do multi-selections. But the select options in the list box is massive data, so the postback ViewState is huge. What I did to solve is set EnableViewState="false", then try to grab the checked item in request form. This is my code:
front end:
<telerik:RadListBox ID="listbox1" runat="server" CheckBoxes="true" EnableViewState="false"
SelectionMode="Single">
</telerik:RadListBox>
back end:
var listbox = Request.Form[listbox1.ClientID + "_ClientState"];
The select options are populated in Page_Load().
First I noticed "Request.Form[listbox1.ClientID]" does not exist in the form returned, instead there is "Request.Form[listbox1.ClientID + "_ClientState"]". I guess it's a difference between RadListBox and regular ListBox I am not sure. But I am not sure what should I do next.
I want to grab the checked options. How can I do that? What structure is the "ClientState"?
Or is there another better way to get ride of the Huge ViewState issue? I know this has been a pain from ASP.NET, but any help will be appreciated.
Thanks
                                I am using RadListBox with checkboxes for user to do multi-selections. But the select options in the list box is massive data, so the postback ViewState is huge. What I did to solve is set EnableViewState="false", then try to grab the checked item in request form. This is my code:
front end:
<telerik:RadListBox ID="listbox1" runat="server" CheckBoxes="true" EnableViewState="false"
SelectionMode="Single">
</telerik:RadListBox>
back end:
var listbox = Request.Form[listbox1.ClientID + "_ClientState"];
The select options are populated in Page_Load().
First I noticed "Request.Form[listbox1.ClientID]" does not exist in the form returned, instead there is "Request.Form[listbox1.ClientID + "_ClientState"]". I guess it's a difference between RadListBox and regular ListBox I am not sure. But I am not sure what should I do next.
I want to grab the checked options. How can I do that? What structure is the "ClientState"?
Or is there another better way to get ride of the Huge ViewState issue? I know this has been a pain from ASP.NET, but any help will be appreciated.
Thanks
8 Answers, 1 is accepted
0
                                
                                                    Rui
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 14 Nov 2013, 10:05 PM
                                            
                                        And also I am just wondering, how is RadListBox return such a big viewstate when it has around 2000 items.
When I use radgrid with around 20000 rows, the viewstate is much smaller.
                                        When I use radgrid with around 20000 rows, the viewstate is much smaller.
0
                                
                                                    Shinu
                                                    
                                            
    Top achievements
    
            
                 Rank 2
                Rank 2
            
    
                                                
                                                answered on 15 Nov 2013, 08:01 AM
                                            
                                        Hi Rui,
Please have a look into the sample code to get the selected Item of RadListBox in RadButton Click event.
ASPX:
C#:
Thanks,
Shinu.
                                        Please have a look into the sample code to get the selected Item of RadListBox in RadButton Click event.
ASPX:
<telerik:RadListBox ID="RadListBox1" runat="server" CheckBoxes="true" EnableViewState="false"    SelectionMode="Single"></telerik:RadListBox><telerik:RadButton ID="RadButton1" runat="server" Text="Get Items" OnClick="RadButton1_Click"></telerik:RadButton>C#:
protected void Page_Load(object sender, EventArgs e){    RadListBox1.DataSourceID = "SqlDataSource1";    RadListBox1.DataTextField = "OrderID";    RadListBox1.DataBind();    //select an item    RadListBox1.SelectedIndex = 5;}protected void RadButton1_Click(object sender, EventArgs e){    string text = RadListBox1.SelectedItem.Text; }Thanks,
Shinu.
0
                                
                                                    Rui
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 15 Nov 2013, 02:56 PM
                                            
                                        I was using that, but now after enableViewState set to false, the RadListBox in the postback doesn't contain the checked items anymore.
                                        0
                                
                                                    Rui
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 15 Nov 2013, 03:50 PM
                                            
                                        what you are getting from RadListBox1.SelectedItem.Text is actually the selected item from page load.
But what I need is what user checked, the sample doesn't really help.
                                        But what I need is what user checked, the sample doesn't really help.
0
                                
                                                    Rui
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 15 Nov 2013, 05:11 PM
                                            
                                        So I tried using Load On Demand to solve my massive ViewState issue, but I still cannot get user's checkitem correctly. Here is the code:
ASP:
 
 
C#:
 
 
But no matter how many items I checked in the list box, the count is always 1 in the server side. It was working before I use load on demand. Why is this?
                                        ASP:
<telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="MetroTouch" Transparency="20"></telerik:RadAjaxLoadingPanel><telerik:RadListBox CssClass="bottom-field" ID="lbProviders" runat="server" CheckBoxes="true"       EnableLoadOnDemand="true" LoadingPanelID="<%# RadAjaxLoadingPanel1.ClientID %>"  Width="200px" Height="494px"> </telerik:RadListBox><telerik:RadButton runat="server" Text="View"value="View" ID="Button1" OnClick="bnView_Click" />C#:
protected void Page_Load(object sender, EventArgs e){        lbProviders.DataSource = dtProviders;        lbProviders.DataTextField = "ProviderName";        lbProviders.DataValueField = "ProviderId";                 if (!Page.IsCallback)        {            lbProviders.DataBind();        }}protected void bnView_Click(object sender, EventArgs e){    if (lbProviders.CheckedItems.Count > 5)    {        //Do something;    } }But no matter how many items I checked in the list box, the count is always 1 in the server side. It was working before I use load on demand. Why is this?
0
                                
                                                    Rui
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 15 Nov 2013, 07:17 PM
                                            
                                        Hi Shinu, 
I just found out from one of the thread saying "the CheckBoxes feature of RadComboBox along with Load On Demand" is not supported, here is the link:
http://www.telerik.com/community/forums/aspnet-ajax/combobox/radcombobox-with-checkbox---unable-to-set-checkbox-on-server-side.aspx
Is this the same case for RadListBox?
If so, I will go back to question of how to get the checkedItems Collections from Request.Form[RadListBox_ClientState]?
Thanks
                                        I just found out from one of the thread saying "the CheckBoxes feature of RadComboBox along with Load On Demand" is not supported, here is the link:
http://www.telerik.com/community/forums/aspnet-ajax/combobox/radcombobox-with-checkbox---unable-to-set-checkbox-on-server-side.aspx
Is this the same case for RadListBox?
If so, I will go back to question of how to get the checkedItems Collections from Request.Form[RadListBox_ClientState]?
Thanks
0
                                
                                                    Shinu
                                                    
                                            
    Top achievements
    
            
                 Rank 2
                Rank 2
            
    
                                                
                                                answered on 19 Nov 2013, 11:55 AM
                                            
                                        Hi Rui,
The RadListBox CheckedItems.Count is returning Zero because it is binding on the Page_Load event. Please try the following approach to get the CheckedIndices of the RadListBox.
ASPX:
C#:
Thanks,
Shinu.
                                        The RadListBox CheckedItems.Count is returning Zero because it is binding on the Page_Load event. Please try the following approach to get the CheckedIndices of the RadListBox.
ASPX:
<telerik:RadListBox ID="RadListBox1" runat="server" CheckBoxes="true" EnableViewState="false"           SelectionMode="Single">       </telerik:RadListBox>C#:
protected void Page_Load(object sender, EventArgs e){    RadListBox1.DataSourceID = "SqlDataSource1";    RadListBox1.DataTextField = "OrderID";    if (!Page.IsCallback)    {        RadListBox1 .DataBind();    }}protected void RadButton1_Click(object sender, EventArgs e){    string listbox = Request.Form[RadListBox1.ClientID + "_ClientState"];    string[] tokens = listbox.Split(new string[] { "\"" }, StringSplitOptions.None);    for (int i = 0; i < tokens.Length; i++)    {        if (tokens[i] == "checkedIndices")        {            string temp = tokens[i + 1];            string[] checkedindices = new string[temp.Length];            int k = 0;            for (int j = 2; j < temp.Length - 1; j = j + 2)            {                checkedindices[k] = temp[j].ToString();                Response.Write(checkedindices[k]);                k++;            }        }    }}Thanks,
Shinu.
0
                                
                                                    Rui
                                                    
                                            
    Top achievements
    
            
                 Rank 1
                Rank 1
            
    
                                                
                                                answered on 19 Nov 2013, 07:00 PM
                                            
                                        Hi Shinu, 
I was hoping for something better than string parsing, but that works.
There is one problem with your code though.
This only works for single digit indices, I changed to something like this and it works:
 
Thanks
                                        I was hoping for something better than string parsing, but that works.
There is one problem with your code though.
for (int j = 2; j < temp.Length - 1; j = j + 2)This only works for single digit indices, I changed to something like this and it works:
List<string> checkededindices = new List<string>();string listbox = Request.Form[lbProviders.ClientID + "_ClientState"];string[] tokens = listbox.Split(new string[] { "\"" }, StringSplitOptions.None);for (int i = 0; i < tokens.Length; i++){    if (tokens[i] == "checkedIndices")    {        string temp = tokens[i + 1].Substring(2, tokens[i+1].Length-4);        checkededindices = temp.Split(new char[] {','}).ToList<string>();             }}Thanks