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 のよりエレガントな方法を使用することをお勧めします。

Viewbag に関する公式の asp.net mvc Web サイトからの引用:

新しい「ViewBag」プロパティ

MVC 2 コントローラーは、遅延バインドされたディクショナリ API を使用してビュー テンプレートにデータを渡すことができる ViewData プロパティをサポートします。MVC 3 では、ViewBag プロパティでもう少し単純な構文を使用して、同じ目的を達成することもできます。たとえば、ViewData["Message"]="text" と書く代わりに、ViewBag.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 に答える