我想在MVC中实现父子结构
我从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; }
}
答案 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>
}
}
我用一个项目硬编码了一个客户端,但您可以考虑将其替换为数据库中的数据。