3

所以我有这个代码:

var list = new List<Carrito> { 
                new Carrito { ProductId = producto.ID , Cantidad = 1, PrecioUnitario = producto.Precio }
            };

            Session["list"] = list;

            return View();

然后我加载视图,但我不知道如何打印会话内的内容。有任何想法吗?

这是我在视图中使用但不起作用的代码:

@foreach(var item in (IEnumerable<object>)Session["list"] )
{
  <p>@item.ProductId</p>
}
4

2 回答 2

4

它就像从会话变量中读回值并将其转换为原始类型一样简单,然后做任何你想做的事情

例子:

@{
    if(Session["list"]!= null)
    {
    var listBackFromSession = (List<Carrito>)Session["list"];
    // do what you want
    }
 }

我的建议是使用 ViewBag 更优雅的方式。

来自官方 asp.net mvc 网站关于 Viewbag 的引用:

新的“ViewBag”属性

MVC 2 控制器支持 ViewData 属性,该属性使您能够使用后期绑定字典 API 将数据传递到视图模板。在 MVC 3 中,您还可以使用更简单的语法和 ViewBag 属性来完成相同的目的。例如,您可以编写 ViewBag.Message="text",而不是编写 ViewData["Message"]="text"。您无需定义任何强类型类即可使用 ViewBag 属性。因为它是一个动态属性,所以您可以改为获取或设置属性,它会在运行时动态解析它们。在内部,ViewBag 属性作为名称/值对存储在 ViewData 字典中。(注意:在 MVC 3 的大多数预发布版本中,ViewBag 属性被命名为 ViewModel 属性。)

此外,这是一篇关于 MVC 中保存数据的不同方式的好文章:http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp。 net-mvc-3-应用程序

例子:

var list = new List<Carrito> { 
                new Carrito { ProductId = producto.ID , Cantidad = 1, PrecioUnitario = producto.Precio }
            };

// use ViewBag
ViewBag.myList = list;

then inside your view, read them back like this:

var myList = (List<Carrito>)ViewBag.myList;
// your code
于 2012-05-30T09:54:39.400 回答
1

你在做 MVC根本上是错误的。在 MVC 中,视图仅用于渲染模型。访问该模型的逻辑应该在控制器或任何其他地方实现,而不是在视图本身中。

因此,我建议您只需将列表传递给视图,并通过@model List<Carrito>在顶部包含来使您的视图具有强类型。

于 2012-05-30T10:09:13.010 回答