今天仔细了看了它的流程和页面的一些逻辑 发现一个以前不是常用的东西。求大侠解释下谢谢。
图片:
代码:
public ActionResult AddToCart(int id) { // Retrieve the album from the database var addedAlbum = storeDB.Albums .Single(album => album.AlbumId == id); // Add it to the shopping cart var cart = ShoppingCart.GetCart(this.HttpContext); cart.AddToCart(addedAlbum); // Go back to the main store page for more shopping return RedirectToAction("Index"); }
这一个ShoppingCart.GetCart(this.HttpContext);
的上下文对象,对应的方法。
public const string CartSessionKey = "CartId";
public static ShoppingCart GetCart(HttpContextBase context) { var cart = new ShoppingCart(); cart.ShoppingCartId = cart.GetCartId(context); return cart; }
// We're using HttpContextBase to allow access to cookies. public string GetCartId(HttpContextBase context) { if (context.Session[CartSessionKey] == null) { if (!string.IsNullOrWhiteSpace(context.User.Identity.Name)) { context.Session[CartSessionKey] = context.User.Identity.Name; } else { // Generate a new random GUID using System.Guid class Guid tempCartId = Guid.NewGuid(); // Send tempCartId back to client as a cookie context.Session[CartSessionKey] = tempCartId.ToString(); } } return context.Session[CartSessionKey].ToString(); }
之后呈现的页面
不明白他的业务逻辑 就是他这样做的目的 主要是这个上下文对象 。
从 楼主 贴的代码看,不传递 this.HttpContext ,直接在 ShoppingCart 使用这个HttpContext也是可以的。
可能是 这个 ShoppingCart 购物车 毕竟是一个对象,为了到达和HttpContext 解耦,而用HttpContextBase,这样的话,可以很好的进行单元测试。
听你的回答 又在网上看了下 有点明白了 谢谢 也谢谢其他的2位朋友
解耦