Class questions

  • Thread starter Thread starter Trust Me; I'm from the government
  • Start date Start date
T

Trust Me; I'm from the government

I have an employee class - in my page, when it loads, it gets all the
employee data, including the employee Number.
I have
Dim emp As New Employee (at the top of the page, so it's global to the page)
emp.empno=Datareader("empno") - and yes, it does get populated, correctly,
at page Load

Here's what I need, and isn't working:
I have a button on that page, which does a Server.Transfer to another page,
using that number, so I do something like this:
Server.Transfer("secondpage.aspx?empno=" & emp.empno, False) - I've tried
True also

however, at this point, emp.empno shows as '0' - not the real number

Is this the correct way to use class properties?
How long is a (Public) property like this available in the page?
What am I missing?
 
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
 
You can try to pass your info in the Context Object, that might work ???

HttpContext.Current.Items.Add("empno",emp.empno)




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