2012-04-23 29 views
5

Tôi cố gắng thêm "Đơn hàng" mới vào Phiên của tôi. Tôi bắt đầu tạo ra một phiên trong tập tin Global.aspx tôi dưới session_start:Điều gì gây ra một ngoại lệ nullreference trong mã này?

Session.Add("Cart", new WebShopData.Order()); 

Tại trang đăng nhập của tôi làm cho một phiên mới:

Session["userID"] = "User"; 
     ((Order)Session["Cart"]).UserID = userID; 

Sau đó tại trang cửa hàng của tôi, tôi muốn thêm công cụ để các phiên:

if ((Order)Session["Cart"] != null) 
((Order)Session["Cart"]).OrderRow.Add(new OrderRows({ArticleID = 2, Quantity = 1) }); 

Tại dòng cuối cùng này, tôi nhận được ngoại lệ về ngoại lệ. Tại sao điều đó có thể?


Dưới đây là hai lớp học của tôi:

public class Order 
    { 
    public List<OrderRows> OrderRow { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 
    public string Zip { get; set; } 
    public int UserID { get; set; } 
    } 

    public class OrderRows 
    { 
    public int ArticleID { get; set; } 
    public int Quantity { get; set; } 

    public override string ToString() 
    { 
      return string.Format("Artikel: {0}, Antal: {1}.\n", ArticleID, Quantity); 
    } 
    } 

Trả lời

4

Bạn cần phải tạo một phiên bản của OrderRow trước khi sử dụng nó. Tôi đề nghị làm việc đó trong các nhà xây dựng như vậy ...

Thêm phần này vào lớp đặt hàng của bạn

public class Order { 
    ....other stuff... 

    public Order() { 
     OrderRow = new List<OrderRows>(); 
    } 
} 
2

Khi bạn tạo một thứ tự mới OrderRow nộp là null. Bạn phải khởi tạo hàng Đặt hàng trên Trình tạo đơn đặt hàng.

Các vấn đề liên quan