如何在ASP.NET MVC Razor项目视图中显示集合?
我的模型和视图如下。对于一个人,我要在屏幕上显示许多测试。在此先感谢
namespace UI.Models
{
public class SuperStudent
{
public string FullName { get; set; }
public ICollection<TestDetail> CandidateTestDetails { get; set; }
}
public class TestDetail
{
public DateTime TestDate { get; set; }
public string RegNum { get; set; }
}
}
查看
@model IEnumerable<UI.Models.SuperStudent>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.FullName)
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
Print all test details
</td>
</tr>
}
</table>
答案 0 :(得分:6)
对于一个人,您的观点必须如下:
@model UI.Models.SuperStudent
<h2>@Model.FullName</h2>
<table class="table">
<tr>
<th>
TestDate
</th>
<th>
RegNum
</th>
</tr>
@foreach (var item in Model.CandidateTestDetails ) {
<tr>
<td>
@item.TestDate
</td>
<td>
@item.RegNum
</td>
</tr>
}
</table>
答案 1 :(得分:1)
代码在循环内部的工作方式与在循环外部的工作方式相同。只需引用循环项。例如:
@foreach (var student in Model) {
@foreach (var test in student.CandidateTestDetails) {
<tr>
<td>@test.RegNum</td>
</tr>
}
}
这将只输出RegNum
值。您还可以通过引用集合中的元素来使用DisplayNameFor
之类的内容:
@foreach (var student in Model) {
@foreach (var test in student.CandidateTestDetails) {
<tr>
<td>
@Html.DisplayNameFor(model => student.CandidateTestDetails.First().RegNum)<br />
@test.RegNum
</td>
</tr>
}
}
虽然直观地,但如果Model
为空(由于First()
会引发异常),这似乎可能会失败,但它实际上并不是 对集合执行First()
。引擎只是使用它反映到First()
返回的模型中以确定显示名称。
鉴于此,您可以根据需要构建标记。如果它足够复杂,您甚至可以仅为该集合中的项创建局部视图,并通过将item
值传递给局部视图来在循环中渲染该局部视图。