2012-05-08 77 views
4

我有UsersClass永远不会超过10个项目。如何查看用户类与表中的视图这样的事情?asp.net mvc 3剃须刀&html表

我想表明与10个细胞

+1

使用'

'? – Jon

+0

是的。 in @foreach –

+0

不知道我是否正确理解你的问题,用户类是否有10个属性?或者你想显示来自多个“UserClass”对象的10个属性? –

回答

10

一如往常,并在每个ASP.NET MVC应用程序,我建议使用它适合于观的要求视图模型两行。因此,在这个视图中,您提到要组由每排5种元素的用户表:

public class MyViewModel 
{ 
    public int Key { get; set; } 
    public IEnumerable<UsersClass> Users { get; set; } 
} 

,然后在控制器动作:

public ActionResult Index() 
{ 
    // that's your domain model => a list of UsersClass 
    // could be coming from wherever you want 
    var users = Enumerable.Range(1, 7).Select(x => new UsersClass 
    { 
     Id = x 
    }); 

    // Now let's group those users into the view model: 
    // We will have 5 elements per row 
    var model = users 
     .Select((u, index) => new { User = u, Index = index }) 
     .GroupBy(x => x.Index/5) 
     .Select(x => new MyViewModel 
     { 
      Key = x.Key, 
      Users = x.Select(y => y.User) 
     }); 
    return View(model); 
} 

最后是强类型的观点是很琐碎:

@model IEnumerable<MyViewModel> 
<table> 
    @foreach (var item in Model) 
    { 
     <tr> 
      @foreach (var user in item.Users) 
      { 
       <td>@user.Id</td> 
      } 

      <!-- That's just to fill the row with the remaining 
       td if we have less than 5 users. Obviously 
       depending on your requirements you could use 
       a single td with a calculated colspan or something else 
      --> 
      @for (int i = item.Users.Count(); i < 5; i++) 
      { 
       <td></td> 
      } 
     </tr> 
    } 
</table> 

显然,这种观点可以简化甚至进一步使用的显示模板:

@model IEnumerable<MyViewModel> 
<table> 
    @Html.DisplayForModel() 
</table> 

并在相应的显示模板:

@model MyViewModel 
<tr> 
    @Html.DisplayFor(x => x.Users) 
    @for (int i = item.Users.Count(); i < 5; i++) 
    { 
     <td></td> 
    } 
</tr> 

和UsersClass显示模板:

@model UsersClass 
<td>@user.Id</td> 

和结果:

enter image description here

3

不知道这是你正在寻找什么,但如果它不是确切的,你应该可以很容易修改:

@* Check to make sure your user class is not null *@ 
@if (Model.UserClass != null) 
{ 
    <table> 
    for (int i = 1; i <= 2; i++) 
    { 
     <tr> 
     for (int j = 1; j <= 5; j++) 
     { 
      <td>if (Model.UserClass[(j*i)-1] != null) { Model.UserClass[(j*i)-1] }</td> 
     } 
     </tr> 
    } 
    </table> 
} 

我写得很快,但这应该是接近你所需要的。