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