使用剃刀视图中的集合中只有2个元素

问题描述:

有没有办法在剃刀视图中只使用2个或任何其他特定数量的元素? 我想用这样的事情在我看来:使用剃刀视图中的集合中只有2个元素

@Html.DisplayFor(x => x.Authors.Take(2)) 

我知道我可以通过创建一个模型,一个新的属性,并指定有规则实现这一目标,但是这不是我所期待的。就我而言,这个特定模型有很多观点,每个模型都有不同数量的元素。

我也很想知道为什么上面的例子不起作用。 谢谢

+0

更重要的是......当你填入要显示在视图模型......你为什么不只是填充你真的想在视图中显示哪些模型? –

+0

您可以使用显示模板找到解决方案http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor-templates.html –

你可以通过循环模型数组来实现这一点。
事情是这样的:

@for(int i=0; i < YOUR_SPECIFED_AMOUNT_OF_ELEMENT; i++){ 
    @Html.DisplayFor(x => x.Authors[i]) 
} 

我希望你提供的,如果你在Authors集合定义元素的类型diplay模板工作的例子(让我们assumet该类型是Author)。如果你有IEnumerable<Author>(或实现类型如List<Author>等),那么MVC框架应该使用该集合的每个元素该显示模板自身(因为这是集合的默认行为/默认显示模板DisplayFor )。

所以假设Author被定义为这样:

public class Author { 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

你定义的显示模板〜/查看/共享/ DisplayTemplate/Author.cshtml这样:

@model Author 
@Html.DisplayFor(a => a.FirstName) 
@Html.DisplayFor(a => a.LastName) 

然后,如果你使用从你的例子中的代码,我会假设在你的例子中得到的HTML将是相同/相似的,如果你使用:

@Html.DisplayFor(a => a.Authors.First()) 
@Html.DisplayFor(a => a.Authors.Skip(1).First()) 

或者:

@foreach(Author author in Model.Authors.Take(2)) { 
    @Html.DisplayFor(author => author) 
}