2012-05-30 36 views
3

所以我有這樣的代碼:如何訪問列表中保存在會話中的對象。 ASP.NET MVC 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

它是從您的會話varable回讀值,並將其轉換爲原始類型一樣簡單,然後做任何你要

例如:

@{ 
    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財產被評爲視圖模型屬性。)

進一步,這是爲了瞭解你在MVC的不同方式的好文章爲了保存數據:http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

例如:

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 
+0

謝謝你,第一個例子有訣竅。第二個示例(使用ViewBag)是否像會話一樣保存頁面之間的對象? – Danny

+0

其實不,你必須重新初始化它才能用於進一步的往返。 –

1

你做的MVC 根本錯誤。在MVC中,視圖僅用於渲染模型。訪問該模型的邏輯應該在控制器或任何其他地方執行,但不能在視圖本身中執行。

因此,我建議您只需將您的列表傳遞給視圖,並通過在頂部包含@model List<Carrito>來強制輸入您的視圖。

+0

+1爲好建議Saeed :) –

相關問題