Reputation: 17820
The problem is in the Buttons's server side click handler, I cannot see the new items added to the listbox. Only the items that were there on page_load are displayed. How do i accomplish what i want to do
My Code Is like this
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (ViewState["gameID"] == null)
{
//Populate Listbox
//Set gameid in viewstate
}
//Add javascript handlers to buttons
btnSomeButton.Attributes.Add("onclick", "aJavaScriptFunction");
}
}
protected void btnSave_Click(object sender, EventArgs e)
{
ListItemCollection x = ListBoxRanks.Items;
//Here items is has just those items that are added to the listbox on page load
}
Upvotes: 3
Views: 3898
Reputation: 129
You should use ajax to add items to the dropdown list. It will ensure your viewstate is in sync with the serverside dropdown control.
Upvotes: 0
Reputation: 5039
Ah when abstractions leek :)
Web server controls are serialised to view state before the response is sent, the control is recreated on postback and the options all put back from view state.
When you add option items client side they are not added to viewstate. The only way is to use your own hidden field to serialise client side additions and read them on postback or ajax the additions serverside.
Upvotes: 4
Reputation: 351566
Only bind to the ListBox if Page.IsPostBack
is false
. This will allow you to see any items added on the client side.
If you are binding to the control on each load you are wiping out any existing items that were loaded by ASP.NET from the request. By only binding if the current page load was not triggered by a postback you are allowing all the items from the request to load, including any items added client-side.
Upvotes: 0