problem z sesjami

0

Witam.

Przerabiam sobie tutoriale z książki A. Troelsena i napotkałem na pewien problem podczas rozdziału z sesjami.

Autor każe utworzyć klasę

public class UserShoppingCart
{
     public string desiredCarColor;
     public string desiredCar;
     public float downPayment;
     public bool isLeasing;
     public DateTime dateOfPickUp;

     public override string ToString()
     {
           return string.Format("Marka: {0} <br/> Kolor: {1}<br/> Zaliczka: {3}$<br/> Leasing: {4}<br/> Data dostawy: {5}", desiredCar, desiredCarColor, downPayment, isLeasing, dateOfPickUp);
}

Następnie przy rozpoczęciu sesji utworzyć nowy obiekt tej klasy

 
void Session_Start(object sender, EventArgs e)
{
     Session["UserShoppingCartInfo"] = new UserShoppingCart();
}

Na końcu po wcisnieciu buttona ma nastąpić przypisanie danych z kontrolek do zmiennych zawartych w tej klasie

 protected void Button1_Click(object sender, EventArgs e)
{
     UserShoppingCart cart = (UserShoppingCart)Session["UserShoppingCartInfo"];
     cart.desiredCarColor = TextBox1.Text;
     cart.desiredCar = TextBox2.Text;
     cart.downPayment = float.Parse(TextBox3.Text);
     cart.isLeasing = CheckBox1.Checked;
     cart.dateOfPickUp = Calendar1.SelectedDate;

      Session["UserShoppingCartInfo"] = cart;
}
 

Tu zaczynają powstawać błędy i wiążące się z nimi pytania.

  1. Czy deklaracja klasy UserShoppingCart ma znajdować się w pliku Default.aspx , Global.aspx czy w obu?
  2. Czy jest możliwe aby napisać deklarację w jednym z plików ale żeby były widoczne w obu?
  3. Czy do obsługi zdarzenia Session_Start mam użyć tej funkcji która znajduje się w Global.aspx czy napisać taką samą w Default.aspx?
0

Znalazłem rozwiązanie

w pliku Global.asax zamiast

 Session["UserShoppingCartInfo"] = new UserShoppingCart();

dałem

 Session["UserShoppingCartInfo"] = new _Default.UserShoppingCart();

i zadziałało.

Czy jest jakaś możliwość aby w pliku Global.asax uzyskać dostęp do bezpośredniego operowania na zmiennych pochodzących i kontrolkach pochodzących z Default.aspx?

0
joeblack_232 napisał(a):
  1. Czy deklaracja klasy UserShoppingCart ma znajdować się w pliku Default.aspx , Global.aspx czy w obu?

A po co dwa razy w tym samym projekcie deklaracja klasy?
Najlepiej, jeśli będzie w pliku UserShoppingCart.cs

  1. Czy jest możliwe aby napisać deklarację w jednym z plików ale żeby były widoczne w obu?

Tak, trzeba jej nadać modyfikator dostępu public i nie zagnieżdżać.
Nie wiem, czy jest sens brać się za ASP.NET, jeśli nie potrafi się tworzyć klas.

  1. Czy do obsługi zdarzenia Session_Start mam użyć tej funkcji która znajduje się w Global.aspx czy napisać taką samą w Default.aspx?</quote>
    O ile dobrze pamiętam, Session_Start jest w Global.asax i tylko tam.
joeblack_232 napisał(a):

Znalazłem rozwiązanie

w pliku Global.asax zamiast

 Session["UserShoppingCartInfo"] = new UserShoppingCart();

dałem

 Session["UserShoppingCartInfo"] = new _Default.UserShoppingCart();

i zadziałało.

Jakbyś nie zagnieździł tej klasy, to nie musiałbyś "znajdować rozwiązania".

Czy jest jakaś możliwość aby w pliku Global.asax uzyskać dostęp do bezpośredniego operowania na zmiennych pochodzących i kontrolkach pochodzących z Default.aspx?

Nawet jeśli, to po co? Nie widzę w tym żadnego sensu.

0

Czyli wystarczy że wrzucę deklarację mojej klasy po

namespace WebApplication
{ 

a przed

public partial class _Default : System.Web.UI.Page
{

Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1