在Razor View中仅使用集合中的2个元素

时间:2016-08-15 11:56:56

标签: c# asp.net-mvc razor

有没有办法如何在Razor View中仅使用2个或任何其他特定数量的元素? 我想在我的观点中使用这样的东西:

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

我知道我可以通过在模型上创建一个新属性并在那里指定规则来实现这一点,但这不是我想要的。就像我的情况一样,这个特定模型有很多视图,每个视图都有不同数量的元素。

我也有兴趣知道为什么上面的例子不起作用。 感谢

2 个答案:

答案 0 :(得分:1)

您可以通过循环模型数组来实现此目的 像这样:

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

答案 1 :(得分:0)

如果您为Authors集合中的元素类型定义diplay模板(我假设类型为Author),我希望您提供的示例能够正常工作。如果你有一个IEnumerable<Author>(或实现类型如List<Author>等),那么MVC框架应该为该集合的每个元素使用该显示模板(因为这是集合的DisplayFor的默认行为/默认显示模板。

因此假设Author被定义为:

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

你定义了显示模板〜/ Views / Shared / 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)
}