【问题标题】:Use only 2 elements from the collection in Razor View在 Razor 视图中仅使用集合中的 2 个元素
【发布时间】:2016-08-15 20:23:57
【问题描述】:

有没有办法在 Razor View 的集合中只使用 2 个或任何其他特定数量的元素? 我想在我看来使用这样的东西:

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

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

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

【问题讨论】:

  • 更重要的是...当您填充要在视图中显示的模型时...为什么不使用您实际希望在视图中显示的内容填充模型?跨度>
  • 您可以使用显示模板找到解决方案growingwiththeweb.com/2012/12/…

标签: c# asp.net-mvc razor


【解决方案1】:

您可以通过循环模型数组来实现这一点。
像这样:

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

【讨论】:

    【解决方案2】:

    如果您为Authors 集合中的元素类型定义显示模板(假设类型为Author),我希望您提供的示例能够正常工作。如果你有一个IEnumerable&lt;Author&gt;(或像List&lt;Author&gt; 等的实现类型),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 相同/相似:

    @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)
    }
    

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多