如何在ASP.NET MVC Razor项目中显示集合?

时间:2014-06-30 16:26:02

标签: asp.net-mvc asp.net-mvc-4 razor uicollectionview

如何在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>

2 个答案:

答案 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值传递给局部视图来在循环中渲染该局部视图。