On Oct 4, 7:33 pm, jdlwri...@gmail.com wrote:
Hi,
How long is a (Public) property like this available in the page?
Only while the page is rendering. When the page postsback you will no
longer have your object.
What am I missing?
To store data across postbacks you need to use something like
ViewState, or Session.
Eg.
If Not IsPostback Then
emp.empno=Datareader("empno")
ViewState["empno"] = emp.empno
Else
emp.empno=ViewState["empno"]
End if
*Controls* preserve their state via the ViewState, which is why you
may have expected your object to also store it's state.
Jim
Another option would be to create a label on your page which is
invisible (visible=false):
On page_load:
if not page.ispostback then
HiddenLabel.text=emp.empno
end if
On button click:
Server.Transfer("secondpage.aspx?empno=" & HiddenLabel.text, False)
As Jim said, Controls preserve their viewstate so storing the Emp.
Number in a Label Control will preserve it for future postbacks.
Session variables would also work but you have to remember that if
your user opens up 10 browser windows, they will all share the same
sesison variables. So if you use session("EmpNumber")=1 in one browser
window, session("EmpNumber") will be 1 in ALL of the browser windows.
If you are using querystrings to send data (which allow multiple
browser windows), session variables will probably not work well for
you.
IfThenElse suggested the HTTPContext.Items collection which is also
useful, but has its own caveats.The HTTPContext is only available
while the request is being processed. So if you add the Employee
object to the collection on the Submit button click, the Context
colelction will be available on the next page (only if you use
server.transfer). But once you are on the next page, you will need to
save that employee information somewhere else because once that page
loads, the HTTPContext is dumped. So if your user were to refresh the
second page, your code would have no way of recovering the Employee
object if it was only stored in the HTTPContext.Items collection.
HTH,
-E