Mike Eghtebas
asked on
Session Variable Question, asp c#
In a list box, after I click on First_Name, the following stores the text value (Angela in this example) in a session variable dictionary object named settings:
2. All //<-- All means no selection is made.
1. Angela
Please see below for Page_Load:
Question: How can I change my code in Page_Load to have a print out like:
2. Angela //<-- why this still shows All
1. Angela
private void ListBoxTextChangedChanged(object sender, EventArgs e)
{
ListBox lb = (ListBox)sender;
string name =lb.ID;
name = name.Substring(3);
int index = lb.SelectedIndex;
settings[name] = lb.Text;
Response.Write("1. " + settings["First_Name"].ToString());
Session["MySettings"] = settings;
}
Soon after the click I get the following on the screen because of Response.Write(...) in these events:2. All //<-- All means no selection is made.
1. Angela
Please see below for Page_Load:
if (IsPostBack)
{
settings = (Dictionary<string, string>)Session["MySettings"];
Response.Write("2. " + settings["First_Name"].ToString());
settings = HttpContext.Current.Session["MySettings"] as Dictionary<string, string>;
AddListBoxes(listBoxes,"PstBack");
}
Question: How can I change my code in Page_Load to have a print out like:
2. Angela //<-- why this still shows All
1. Angela
Presumably it is printing out like that because of the sequence of events.
Page_Load fires before SelectedIndexChanged so it will always show the value from the dictionary as it was prior to the selection of a new item.
Page_Load fires before SelectedIndexChanged so it will always show the value from the dictionary as it was prior to the selection of a new item.
ASKER
I have selected "Angela" upon which Page_Load gets fired. Here I am expecting "Angela" to be printed not All. So, basically I think the problem is related to my session variable coding.
Is my session variable coding correct?
Mike
Is my session variable coding correct?
Mike
As I said the reason it is behaving as it is is because of the sequence in which the events fire.
Your Session value isn't updated until the SelectedIndex event fires. But Page_Load fires before SelectedIndexChanged hence your Session variable hasn't been updated by the time you try to display the value.
So, assuming you have All in you dictionary, the sequence is currently:
1) You click "Angela" in the ListBox
2) The page posts back and Page_Load executes
3) Page_Load outputs "All" because that is what is currently in the Session
4) SelectedIndexChanged fires, which updates the Session with the value "Angela"
So, basically, Page_Load will always show the value that is in the Session before SelectedIndexChanged updates it.
Your Session value isn't updated until the SelectedIndex event fires. But Page_Load fires before SelectedIndexChanged hence your Session variable hasn't been updated by the time you try to display the value.
So, assuming you have All in you dictionary, the sequence is currently:
1) You click "Angela" in the ListBox
2) The page posts back and Page_Load executes
3) Page_Load outputs "All" because that is what is currently in the Session
4) SelectedIndexChanged fires, which updates the Session with the value "Angela"
So, basically, Page_Load will always show the value that is in the Session before SelectedIndexChanged updates it.
ASKER
I think step 1a is missing:
1) You click "Angela" in the ListBox
1a) "Angela" enters into settings dictionary variable in the same ListBox event.
(And, settings ought to be available with "Agela" in it in postback = true of Page_Load. But why it is not?)
2) The page posts back and Page_Load executes
3) Page_Load outputs "All" because that is what is currently in the Session
4) SelectedIndexChanged fires, which updates the Session with the value "Angela"
1) You click "Angela" in the ListBox
1a) "Angela" enters into settings dictionary variable in the same ListBox event.
(And, settings ought to be available with "Agela" in it in postback = true of Page_Load. But why it is not?)
2) The page posts back and Page_Load executes
3) Page_Load outputs "All" because that is what is currently in the Session
4) SelectedIndexChanged fires, which updates the Session with the value "Angela"
Step 1A wasn't missing, that is the whole point.
"Angela" is put into the dictionary in the ListBox event, but that event fires after the Page_Load event. So the updated value isn't available in Page_Load.
"Angela" is put into the dictionary in the ListBox event, but that event fires after the Page_Load event. So the updated value isn't available in Page_Load.
ASKER
Does StateView remembers "Angela" was selected in Page_Load?
You can access the ListBox directly from Page_Load and retrieve the value that way.
i.e. In Page_Load:
i.e. In Page_Load:
ListBox lb = this.<name_of_your_listbox>;
string value = lb.Text;
ASKER
1. User clicks on an option (presumably session variable of some kind ought to remember it).
2. Page_Load fires (because Postback is true, it is expected that the session variable to have the selected value).
If above statements are correct, please help me with its coding.
Thanks,
Mike
2. Page_Load fires (because Postback is true, it is expected that the session variable to have the selected value).
If above statements are correct, please help me with its coding.
Thanks,
Mike
>> If above statements are correct
The above statements aren't true.
Nothing gets put into the session automatically. The data from the page is sent to the server as part of the Request object. The page and its controls are then reconstructed based on the data sent from the client.
Next, the page initialization events fire, followed by Page Load, followed by any events for individual controls.
Page load does not have the up-to-date session value because the session value is set by a Control event, which runs after the Load event
The above statements aren't true.
Nothing gets put into the session automatically. The data from the page is sent to the server as part of the Request object. The page and its controls are then reconstructed based on the data sent from the client.
Next, the page initialization events fire, followed by Page Load, followed by any events for individual controls.
Page load does not have the up-to-date session value because the session value is set by a Control event, which runs after the Load event
ASKER
Carl,
My apology for not following it; no doubt you are correct. What I want to give me something that works.
What I want is to click on the listbox and this action supplies my selection as a criteria to my rest of the code to filter accordingly.
Just to let you know, I have all code stuff taken care of. The problem I am having is I have to click on a "Angela", for example, but the screen refreshes without being filtered. However on a second click it does.
About second click, if I click again on "Angela", of course, the event will not fire and I have to click on any other item.
My apology for not following it; no doubt you are correct. What I want to give me something that works.
What I want is to click on the listbox and this action supplies my selection as a criteria to my rest of the code to filter accordingly.
Just to let you know, I have all code stuff taken care of. The problem I am having is I have to click on a "Angela", for example, but the screen refreshes without being filtered. However on a second click it does.
About second click, if I click again on "Angela", of course, the event will not fire and I have to click on any other item.
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
ASKER
Thank you for your patience.
if (IsPostBack) to if (!IsPostBack)
try the above one if it helps or just post your markup code also.