在视图中显示会话列表?

时间:2016-02-09 13:18:35

标签: c# asp.net asp.net-mvc session razor

我正在学习ASP.NET MVC,我有一些问题要理解并以正确的方式使用session。让我解释一下我所做的和我想要实现的目标。

首先,我在Home控制器的Index方法中创建一个包含Products列表的会话。我还在列表中添加了一些默认产品,如下所示:

Session["ShoppingCart"] = new List<Products>() { new Products { ID = 1 }, new Products { ID = 2 } };

(我的目标是稍后在其他控制器中使用此会话以便能够添加产品,但是现在我只想进行一些测试。)

然后在Shop控制器中,我有一个动作方法来显示购物车的内容。这是我开始迷失在这个美好世界的地方。

我无法解决的问题是如何处理Session [“ShoppingCart”]以便我可以查看列表中的产品列表!?我应该有一个IEnumerable视图能够用剃刀迭代它的列表吗?

3 个答案:

答案 0 :(得分:2)

你可以像这样编码

List<Products> list = (List<Products>)Session["ShoppingCart"];


@foreach(var item in list) 
{
        do what ever 
}

我希望我为你工作。

答案 1 :(得分:0)

在这种情况下,您可以做的最好的事情是定义购物车类:

public class Cart{
    IList<Products> Products {get; set;}
    // any other properties that you would need or structure this in way to store quantities, prices per line and so on
}

然后假设您在会话中存储没有任何问题,您只需访问它(并且请注意您总是需要投射从Session获得的任何内容):

var cart = (Cart) Session["ShoppingCart"];
// do any work you need on the cart object

答案 2 :(得分:0)

您也可以使用下面给出的代码

var list = Session["ShoppingCart"] as List<Products>;

我更喜欢使用as关键字,因为没有100%保证会话将包含列表(由于应用程序池刷新,网站重新启动等)。给你额外的防御以避免NullReferenceException。

然后执行您的流程

if (list != null){
   foreach(var item in list) 
   {
       your custom code
   }
}

希望这可以帮助你