【问题标题】:Inner helper with different conditions in foreach loop, how to manage that?在 foreach 循环中具有不同条件的内部助手,如何管理?
【发布时间】:2014-12-02 10:28:14
【问题描述】:

foreach 循环中不同条件的内部助手,如何管理?

我希望有不同的 foreach 循环,但助手的其余部分应该相同 不同的版本

   1 - foreach (var item in Model.Where(_ => _.Version > 0))
   2 - foreach (var item in Model.Where(_ => _.Version = 0))
   3 - foreach (var item in Model)

有什么建议吗?

 @helper WriteGrid()
 {
  foreach (var item in Model.Where(_ => _.Version > 0))
  {
    <div>
     @item.From
    </div>
  }
}

【问题讨论】:

  • 具体有哪些不同的条件?您在问题中输入的三个将导致 ID 为 0 或 ID 为 2 的项目被处理两次。这是故意的,还是每个项目最多只处理一次,或者每个项目都应该只处理一次?
  • 我编辑了问题以使其更清晰。 Condition1 = Version1, Condition2 = 所有版本除了 Version1, Condition3 = ALL 不止一次
  • 让循环体成为另一个助手怎么样?
  • 带有另一个助手的循环体是一种解决方案
  • 为什么要多次渲染同一个项目(最后一个循环复制了前两次已经渲染的那些项目)?

标签: c# asp.net-mvc-4 razor-2


【解决方案1】:

您可以稍微更改您的@helper 以获取Func&lt;T,bool&gt;,它可以决定显示哪些项目:

@helper WriteGrid(Func<MyModel, bool> p)
{
    foreach (var item in Model.Where(p))
    {
        <div>@item.From</div>
    }
}

@WriteGrid(x => x.Version > 0)
<hr/>
@WriteGrid(x => x.Version == 0)
<hr/>
@WriteGrid(x => true)
<hr/>

【讨论】:

  • 我认为您的版本 far 比我的更可能是 OP 所追求的,所以我删除了我的答案。不过,为了简化我要做的一项更改是:我将 Predicate&lt;MyModel&gt; 更改为 Func&lt;MyModel, bool&gt;,然后直接将其传递给 Where
  • 是的,当然好点。我只是在评论说,如果他们确实希望他们直接接踵而至,你的回答会更有效率
  • 是的,它们都是有效的,更新版本只是更干净了一点
猜你喜欢
  • 1970-01-01
  • 2019-09-04
  • 2022-11-04
  • 2017-08-29
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 2021-08-09
  • 2020-11-24
相关资源
最近更新 更多