【问题标题】:Alternative to foreach in C# Razor pageC# Razor 页面中 foreach 的替代方法
【发布时间】:2016-10-29 01:54:30
【问题描述】:

我需要在 ASP.NET MVC 5 站点的 Razor 页面中输出包含 IEnumerable 的复杂 HTML。

我想使用嵌套的 for 循环来构建 HTML - 但是,如果所有对象输出都包含在 foreach 循环中,则这是不可能的。

除了使用foreach 循环之外,有没有办法做这样的事情来获取序列中的下一个对象:

if (x = 1)
{
    for (var x=0; x<2; x++)
    {
        <div class="row">
            for (var n=0; n<4; n++)
            {
                <div class="a">
                    Model.GetNextObject.Name
                </div>
            }
        </div>
    }
}
else
{
    <div class="b">
        Model.GetNextObject.Name
    </div>
}

在许多情况下,这将允许编写更优雅的代码。

这可能吗?

【问题讨论】:

  • 您的代码有点不清楚您期望的输出是什么。你能举一个简单的例子来说明值和预期的输出吗
  • “在许多情况下,这将允许更优雅的代码。” ——为什么会这样?你需要 for 循环做什么?
  • @duplode 说我想要复杂的 HTML 结构——并且需要使用 if 条件(例如引导程序中的行和跨度/列)——你需要大量的 @: 来阻止 Razor 中出现错误。跨度>
  • @StephenMuecke 输出可能只是一个名称列表 - 关键是能够在我想要的时候获取下一个对象 - 不绑定到 foreach 循环 - 从而实现更复杂的结构 - 多个嵌套循环而不是需要 @: 来减轻 Razor 中未关闭的 html 标记错误的 if 语句。

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


【解决方案1】:

是的,有可能,

  1. 使用 GetEnumerator 获取对 Enumerator 的引用
  2. 调用 movenext 方法移动到下一个元素

请参阅此堆栈溢出帖子 Using IEnumerable with for loops

var enumerator = getInt().GetEnumerator();
while(enumerator.MoveNext())
{
    var MyObject = enumerator.Current;
    Console.WriteLine(MyObject.Property);
}

【讨论】:

  • 谢谢!为了改善未来用户的答案,是否有机会在此处粘贴代码示例?
  • 我这里引用的链接包含示例代码,我不想复制粘贴代码,所以我引用了代码。可能将来我会开始粘贴示例代码。
  • 谢谢-堆栈溢出就像答案中的代码一样-而不是使用外部引用-我想是为了方便-以防该链接在将来某个时候失效。我已经贴在这里了-谢谢。
  • 当存在没有 if 的 enumerator.MoveNext() 语句时,Enumerator 将文本“True”输出到页面。你知道怎么阻止吗? (我可以插入一个空的 if 但它不是很优雅)。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 2019-02-08
  • 2019-02-28
  • 2011-06-28
  • 2018-01-04
相关资源
最近更新 更多