如何在MVC Razor视图中显示来自viewbag的嵌套数据

时间:2016-04-19 16:32:44

标签: c# asp.net-mvc razor

我想在MVC中实现父子结构

Like This 我从viewBag获得这两个列表 那么如何在mvc Razor视图中获得嵌套结构 我的HTML代码在这里

  <table>
  @{  IEnumerable<SelectListItem> client = ViewBag.Client;
   foreach (var clientobj in client)
    {
     <tr>
       <th><label>@clientobj.Text</label></th>
          <td>
          <table class="list">
            @{                                                                IEnumerable<SelectListItem> project = ViewBag.Project;
            foreach (var projectobj in project)
          {
        <tr>
        <th><label>@projectobj.Text</label></th>
               <td>
          @Html.CheckBox("chk", projectobj.Selected, new { value = projectobj.Value })
              </td>
             </tr>
               }
           }
    </table>
        </td>

         </tr>}
            }

         </table>

我的视图模型是

public class ClientProjectViewModel
    {
        public int Clientid { get; set; }
        public string ClientName { get; set; }        
        public IEnumerable<ProjectViewModel> project { get; set; }
    }

1 个答案:

答案 0 :(得分:1)

由于您有一个视图模型,您可以考虑将正确的数据加载到其中,然后使用该数据将数据传递给视图(而不是使用ViewBag传递数据)

public ActionResult Details(int id)
{
  var clientList =new List<ClientProjectViewModel> 
  //load clients and it's projects
  clientList.Add(new ClientProjectViewModel { Clientid=1, ClientName="A", 
                                 projects=new List<ProjectViewModel> {
                               new ProjectViewModel { Id=1, Title="ProjectforThisclien1"}
  };    
  return View(clientList)
}

在您的视图中,强烈输入ClientProjectViewModel列表。

@model List<ClientProjectViewModel>
@foreach (var client in Model)
{
  <p>@client.ClientName</p>
  @foreach(var project in client.projects)
  {
    <span>@project.Title</span>
  }
}

我用一个项目硬编码了一个客户端,但您可以考虑将其替换为数据库中的数据。