为什么我在视图控件中的会话为空

时间:2014-02-06 06:59:02

标签: asp.net-mvc

您好我正在尝试制作一个简单的在线杂志,当我点击用户点击addtoCart按钮

我的模型购物车拥有两个属性 - 产品和数量

public class Cart
{

 public ProductLanguages Product { get; set; }
        public int Quantity { get; set; }

}

因此,在我basketViewModel方法的AddProductToCart中,我添加了产品,其中包含我在数据库类型属性中获取的详细信息。然后我将此列表保存在会话中。 例如,如果用户单击“继续购物”按钮并返回索引页面 - 下次当他按下新产品的“addtocart”时,您会看到我进行此检查

lstCarts = (List<Cart>)HttpContext.Current.Session["Cart"];
        if (lstCarts==null)
        {
           lstCarts = new List<Cart>();
        }

首先,我尝试从会话中获取列表,以便我可以获得以前保存的产品。 但是我的会话总是空的,所以我总是丢失以前购买的产品。奇怪的是,我确信我在这行中保存了产品清单

        HttpContext.Current.Session["Cart"] = lstCarts;

这是我的viewmodel

 public class BasketViewModel
    {
    private readonly IProductLanguagesRepository prodlanRepository;
    public List<Cart> lstCarts { get; set; }
    public BasketViewModel() : this(new ProductLanguagesRepository())
    {

    }

    public BasketViewModel(IProductLanguagesRepository prodlanRepository)
    {
        this.prodlanRepository = prodlanRepository;
    }
    public void CreateCart(int id,int quantity)
    {
        lstCarts = (List<Cart>)HttpContext.Current.Session["Cart"];
        if (lstCarts==null)
        {
           lstCarts = new List<Cart>();
        }
        ProductLanguages nwProduct = prodlanRepository.GetProductDetails(id);
        if (nwProduct != null)
        {
            Cart cr = new Cart();
            cr.Product = nwProduct;
            cr.Quantity = quantity;
            lstCarts.Add(cr);
            HttpContext.Current.Session["Cart"] = lstCarts;
        }
    }      
}

和我的控制器

 public class BasketManagementController : Controller
    {
    public ActionResult Index(int id, int quantity)
            {
                BasketViewModel vm = new BasketViewModel();
                vm.CreateCart(id, quantity);
                return View(vm);
            }
     }

2 个答案:

答案 0 :(得分:1)

您使用的概念错误:

*视图模型用于获取和设置属性对象

*控制器用于使用视图模型对象

进行操作

请尝试像这样吼叫

//VIEW MODEL

   public class BasketViewModel{
    public List<Cart> lstCarts { get; set; }    
   }

//CONTROLLER


         public class BasketManagementController : Controller
        {

        private IProductLanguagesRepository prodlanRepository;

        public BasketManagementController(IProductLanguagesRepository prodlanRepository){

            this.prodlanRepository = prodlanRepository;

        } 

            public ActionResult Index(int id, int quantity)
             {
                CreateCart(id, quantity);
                BasketViewModel vm = new BasketViewModel();
                return View(vm);
             }

             public void CreateCart(int id,int quantity)
            {
                lstCarts = (List<Cart>)HttpContext.Current.Session["Cart"];
                if (lstCarts==null)
                {
                   lstCarts = new List<Cart>();
                }
                ProductLanguages nwProduct = prodlanRepository.GetProductDetails(id);
                if (nwProduct != null)
                {
                    Cart cr = new Cart();
                    cr.Product = nwProduct;
                    cr.Quantity = quantity;
                    lstCarts.Add(cr);
                    HttpContext.Current.Session["Cart"] = lstCarts;
                }
            } 


             }

答案 1 :(得分:0)

我没有看到某些行为。 可能是你的问题

ProductLanguages nwProduct = prodlanRepository.GetProductDetails(id);

GetProductDetails(id)

可能有些异常

看看那个。