在视图页

时间:2016-02-06 10:12:51

标签: asp.net-mvc session shopping-cart

我刚刚开始学习如何建立一个网站,我在使用会话创建购物车时遇到了一些问题。

这是我的型号代码:

public class Cart
{
    public Cart()
    {
        Products = new List<ProductStock>();
    }

    public List<ProductStock> Products { get; set; }

    public void AddToCart(Product product, Store store, int quantity)
    {
        Products.Add(new ProductStock
        {
            ProductID = product.ProductID,
            Product = product,
            StoreID = store.StoreID,
            Store = store,
            Quantity = quantity
        });
    }
}

这是控制器代码,我想在视图页面中使用的会话被称为&#34; cart&#34;:

public class CartController : Controller
{
    private MagicInventoryEntities db = new MagicInventoryEntities();

    public ActionResult Index()
    {
        Cart cart = (Cart) Session["cart"];

        return View(cart);
    }

    [HttpPost]
    public ActionResult AddToCart(int productID, int storeID, int quantity)
    {
        Product product = db.Products.Find(productID);
        Store store = db.Stores.Find(storeID);

        Cart cart = (Cart) Session["cart"];

        cart.AddToCart(product, store, quantity);

        return new RedirectToRouteResult(new RouteValueDictionary(
        new
        {
            action = "Index",
            controller = "Cart"
        }));
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }
}

此代码来自我的老师,我的笔记不是很清楚,我没有足够的时间来编写有关视图页面的详细信息。他说他将在星期一再次展示这个过程,我只是不想等待,我想弄明白并继续前进。我只知道调用会话的基本方法是&#34; @session [&#34; SessionName&#34;]。ToString()&#34;。我已经在我的方法(会话[&#34; testing&#34;] = ProductID)中尝试过,我可以获得该值。但是,我不知道如何从Session [&#34; cart&#34;]获得价值。

1 个答案:

答案 0 :(得分:0)

假设您在会话中保存了类型为Cart的对象,为了检索该对象,您可以在索引视图中使用以下代码:

 @{
    Cart cart = HttpContext.Current.Session["Cart"] as Cart;
  }

但是,我看到CartController中的Index方法已经从Session中检索对象并将其传递给Index视图。要访问它,您必须在索引视图中编写以下代码:

@model {ProjectName}.Models.Cart  //you tell the View what type of object it should expect to receive; instead of {ProjectName} write your project name


@foreach(var product in Model.Products) {  //you access the received object by using the keyword Model
    <div>
        @product.ProductId
    </div>
}

如您所见,此示例为您的产品列表中的ProductStock类型的每个项目创建一个div,并在其中写入当前ProductStock ProductId的值。

如果您的会话中没有保存类型为Cart的对象,则可以将以下代码添加到Index方法中:

if(Session["Cart"] == null)
{
    var cart = new Cart();
    Session["Cart"] = cart;
}

Cart cart = (Cart) Session["cart"];
return View(cart);