| | |
Listbox Related Matter
Please support our ASP.NET advertiser: PostgreSQL or MySQL? Compare and contrast the two most popular open source databases
![]() |
Hi all,
I'm relatively new to ASP.NET - used to code in Coldfusion.
I've got this control created in a page <asp:listbox>.
I also have a javascript function in the same page to add listitems into the listbox on certain client calls such as the following:-
I am sure that the items are added into the listbox as I can see it on the front end. Okay the problem is, when I trigger a function call in the vb language, I get listbox1.Items.Count = 0. It should be 1 there. So I'd like to find out from fellow ASP.NET developers if the asp's server control will take note of the listitems updated via javascript.
Thanks in advance.
I'm relatively new to ASP.NET - used to code in Coldfusion.
I've got this control created in a page <asp:listbox>.
I also have a javascript function in the same page to add listitems into the listbox on certain client calls such as the following:-
ASP.NET Syntax (Toggle Plain Text)
var anOption = document.createElement("OPTION"); obj.add(anOption); anOption.text = "foo"; anOption.value = "1";
I am sure that the items are added into the listbox as I can see it on the front end. Okay the problem is, when I trigger a function call in the vb language, I get listbox1.Items.Count = 0. It should be 1 there. So I'd like to find out from fellow ASP.NET developers if the asp's server control will take note of the listitems updated via javascript.
Thanks in advance.
"Study the past if you would define the future" - Confucius
Hey kev, thanks in advance.
Here's the function in javascript:-
Then onclick of a button, I am trying to get the value of listbox1.Items.Count in vb.
Here's the function in javascript:-
ASP.NET Syntax (Toggle Plain Text)
function addOptionToListBox(lsVal, lsNam, obj) { var anOption = document.createElement("OPTION"); obj.add(anOption); anOption.text = lsNam; anOption.value = lsVal; }
Then onclick of a button, I am trying to get the value of listbox1.Items.Count in vb.
"Study the past if you would define the future" - Confucius
•
•
Join Date: Dec 2004
Posts: 1,655
Reputation:
Solved Threads: 35
Elements you add via JavaScript have nothing to do with Objects created in ASP.NET. Given the client-server nature of the web, surely you can see why this is the case.
Server Objects (ASP.NET "Web Controls") exist only on the server. When done processing, the ViewState object is created and embedded within the response stream as a hidden form variable. This is the mechanism by which Web Controls are recreated and restored to their state on PostBack.
Since your JavaScript is creating client elements, and not adding them to the ViewState variable, there is no way your server-side control can create corresponding Web Controls on postback.
What you need to do:
Server-side, you can iterate through the Request object to retrieve posted form values, including any options etc. you created client-side.
OR
Create all your controls server-side.
Server Objects (ASP.NET "Web Controls") exist only on the server. When done processing, the ViewState object is created and embedded within the response stream as a hidden form variable. This is the mechanism by which Web Controls are recreated and restored to their state on PostBack.
Since your JavaScript is creating client elements, and not adding them to the ViewState variable, there is no way your server-side control can create corresponding Web Controls on postback.
What you need to do:
Server-side, you can iterate through the Request object to retrieve posted form values, including any options etc. you created client-side.
OR
Create all your controls server-side.
Err, it's kinda difficult eh kev.
But here goes:-
File1.aspx:-
File2.aspx (VB code):-
Btw, I could not use any of your suggested options, tgreer.
[1] Could not use Request.Form because it's a multiple selection in the listbox.
If I am to programatically do .select() on the listitems in the listbox after adding them it, it would then look kinda ugly lol.
So I opted to add a hidden field instead - by storing a comma separated list of the customer IDs.
But here goes:-
File1.aspx:-
ASP.NET Syntax (Toggle Plain Text)
<asp:ListBox ID="Groups" runat="server" SelectionMode="multiple" width="250"/> <script type="text/javascript"> function getCustomerList(custIDList, custNameList){ var lbClients = document.getElementById("<%=Clients.ClientID %>"); var lbHidden = document.getElementById("<%=hdnClientID.ClientID %>"); var lsValue = custIDList.split(","); var lsName = custNameList.split(","); var cnt = 0; var s = lbHidden.value; for(var i=0; i<lsValue.length; i++) { cnt = 0; for(var j=0; j<lbClients.options.length; j++) { if(lbClients.options[j].value != lsValue[i]) cnt++; } if(cnt == lbClients.options.length) { addOptionToListBox(lsValue[i], lsName[i], lbClients); if (s.length > 0) s = s + ","; s = s + lsValue[i]; } } lbHidden.value = s; } function addOptionToListBox(lsVal, lsNam, obj) { var anOption = document.createElement("OPTION"); obj.add(anOption); anOption.text = lsNam; anOption.value = lsVal; } </script>
File2.aspx (VB code):-
ASP.NET Syntax (Toggle Plain Text)
strScript = "@SCRIPT>window.opener.getCustomerList('" & strValue.ToString() & "', '" & strName.ToString() & "'); window.close(); window.opener.focus();@/SCRIPT>" ClientScript.RegisterClientScriptBlock(Page.GetType(), "CloseChild", strScript.Replace("@", "<"))
Btw, I could not use any of your suggested options, tgreer.
[1] Could not use Request.Form because it's a multiple selection in the listbox.
If I am to programatically do .select() on the listitems in the listbox after adding them it, it would then look kinda ugly lol.
So I opted to add a hidden field instead - by storing a comma separated list of the customer IDs.
"Study the past if you would define the future" - Confucius
•
•
Join Date: Dec 2004
Posts: 1,655
Reputation:
Solved Threads: 35
All form values are submitted back to the server, so all form values are in the Request object, multi-select or not.
Of course, the canonical way to do this in ASP.NET is to populate your controls server-side, even if this means adding server round-trips to your logic.
Glad you got it working, but I predict you're going to have a real struggle with ASP.NET!
Of course, the canonical way to do this in ASP.NET is to populate your controls server-side, even if this means adding server round-trips to your logic.
Glad you got it working, but I predict you're going to have a real struggle with ASP.NET!
![]() |
Other Threads in the ASP.NET Forum
- Previous Thread: Your advice is needed!
- Next Thread: Problem With database Connectivity
Views: 4230 | Replies: 12
| Thread Tools | Search this Thread |
Tag cloud for ASP.NET
.net 2.0 ajax alltypeofvideos anathor appliances application asp asp.net beginner box browser button c# cac checkbox commonfunctions complex connection control dataaccesslayer database datagridview datalist deployment development dgv dialog dropdownlist dynamic dynamically edit editing embeddingactivexcontrol expose feedback fileuploader fill findcontrol flash form formatdecimal formview gridview gudi iis image javascript languages list listbox login microsoft mobile mouse mssql news novell numerical opera panelmasterpagebuttoncontrols parent problem project radio redirect registration relationaldatabases reportemail response.redirect richtextbox rows schoolproject search security select sessionvariables silverlight smoobjects software sql sql-server sqlserver2005 ssl theft tracking treeview validatedate validation vb.net videos vista visualstudio web webapplications webdevelopment webprogramming webservice xsl youareanotmemberofthedebuggerusers






