使用 viewbag 显示对象内部的列表

Display list which inside an object with viewbag

示例:

public class country
    {
        public string name {get;set;}
        public string Alias{get;set;}
        public List<city> cities = new List<city>();

    }

当我在我的控制器上创建 class 国家/地区的实例时.. 在视图中我只能使用 ViewBag 显示名称和别名。我的问题是如何使用带有 foreach 的 Viewbag 访问和显示一个国家/地区的所有城市..

这是我的真实情况..:

在模型中我有:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Mvc;

    namespace StageApp.Models
    {
        public class DAT
        {
            public int IdDat {get;set;}
            public string AliasDat{get;set;}
            public string IdGare{get;set;}
            public List<Destinataires> destinataires = new List<Destinataires>();

        }
          public class DATBussinessLogic
          {
            public void addlistdesti(int iddat , DAT dat)
            {
                  String sql2 = "SELECT matricule,nom_destinataire,prenom_destinataire,etat FROM Destinataires where id_dat =" + dat.IdDat;
                  using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["StageConnection"].ConnectionString))
                  {
                      SqlCommand cmd2 = new SqlCommand(sql2, conn);
                      conn.Open();
                      SqlDataReader rdr2 = cmd2.ExecuteReader();
                      while (rdr2.Read())
                      {
                          var destis = new Destinataires();
                          destis.Matricule = rdr2["matricule"].ToString();
                          destis.NomDestinataire = rdr2["nom_destinataire"].ToString();
                          destis.PrenomDestinataire = rdr2["prenom_destinataire"].ToString();
                          destis.Etat = rdr2["etat"].ToString();
                          dat.destinataires.Add(destis);
                      }
                  }
            }
          }
    }

我有控制器:

using StageApp.Models;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace StageApp.Controllers
{
    public class DATController : Controller
    {
        DATBussinessLogic DATBL = new DATBussinessLogic();

    public ActionResult Index()
        {
            if (Session["username"] == null)
            {

                return RedirectToAction("Index", "Home");
            }
            else
            {
                ViewBag.name = Session["username"];
                return View("Index");
            }
        }

        public ActionResult Listdat()
        {
            String sql = "SELECT * FROM dat";
            var model = new List<DAT>();

            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["StageConnection"].ConnectionString))
            {
                SqlCommand cmd = new SqlCommand(sql, conn);
                conn.Open();
                SqlDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    var dat = new DAT();
                    dat.IdDat = (int)rdr["id_dat"];
                    dat.AliasDat = rdr["alias_dat"].ToString();
                    dat.IdGare = rdr["id_gare"].ToString();
                    dat.IdGare = DATBL.from_id_to_aliasgare(dat.IdGare);
                    DATBL.addlistdesti(dat.IdDat, dat); //a method from Models
                    model.Add(dat);

                }

            }
            ViewBag.dat = model;
            if (Session["username"] == null)
            {

                return RedirectToAction("Index", "Home");
            }
            else
            {
                ViewBag.name = Session["username"];
                return View("Listdat");
            }


        }
    }
}

这是视图:

<div class="container body-content">
        <h2>Liste des DAT disponibles !!</h2>
        <table id="example" class="table table-striped table-bordered" cellspacing="0">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>Alias</th>
                    <th>Gare</th>
                    <th>Déstinataires</th>

                </tr>
            </thead>
            <tbody>
                @foreach (var item in ViewBag.dat)
                {
                    <tr>
                        <td>@item.IdDat</td>
                        <td>@item.AliasDat</td>
                        <td>@item.IdGare</td>
                        <td>@foreach (var desti in ViewBag.dat.destinataires)
                            {
                                <span>Matricule : @desti.Matricule</span>  
                                <span>Nom et prénom : @desti.NomDestinataire @desti.PrenomDestinataire</span>
                                <span>Etat : @desti.Etat</span>
                                <span>***</span>
                            }
                        </td>
                    </tr>
                }
            </tbody>
        </table>
    </div>

如您所见,我尝试显示 Viewbag.dat 的项目.. 工作正常但 Viewbag.dat.destinataires 不工作

我在 ViewBag.dat.destinataires 上遇到错误,上面写着:

System.Collections.Generic.List' 不包含 "destinataires"

的定义

知道问题出在哪里吗?

您正在 ViewBag.dat 循环中访问 ViewBag.dat。你可以从 item 得到 destinataires 属性。

使用下面的代码代替您的 for 循环。您必须将 ViewBag.dat.destinataires 更改为 item.destinataires

 <td>@foreach (var desti in item.destinataires)
              {
                <span>Matricule : @desti.Matricule</span>  
                <span>Nom et prénom : @desti.NomDestinataire      
                @desti.PrenomDestinataire</span>
                 <span>Etat : @desti.Etat</span>
                <span>***</span>
             }
     </td>

它应该适合你。