是否可以说:如果图像在左侧,则下一个应该在右侧,重复直到完成?
伪代码:
@foreach (var item in Model.Items)
{
if (previous class=imageLeft)
{
<div class="imageRight">Right Image</div>
<div>Left Content</div>
}
else
{
<div class="imageLeft">Left Image</div>
<div>Right Content</div>
}
}
答案 0 :(得分:1)
是的,当然。你的伪代码几乎就在那里。只需使用变量来保存值,并记住在每次迭代中更新其值:
@int c = 0;
@foreach (var item in Model.Items)
{
if (c == 0)
{
<div class="imageRight">Right Image</div>
<div>Left Content</div>
c = 1;
}
else
{
<div class="imageLeft">Left Image</div>
<div>Right Content</div>
c = 0;
}
}
或者,您可以使用@foreach (int i = 0; i < Model.Items.Count; i++)
循环,然后使用i % 2
获取偶数/奇数行号,并根据需要应用该类。
答案 1 :(得分:0)
就个人而言,我会为此创建一个帮手。帮助程序保持代码清洁,使内循环更容易处理。一旦应用程序的大小增加,开始为您节省一些时间,特别是如果您复制一个工作示例。这是我的:
public class LooperHelper
{
private int Iterations { get; set; } = 0;
public void AddTick() {
Iterations++;
}
public int GetTicks()
{
return Iterations;
}
public bool DivisibleBy(int divisor)
{
return (Iterations % divisor == 0);
}
public string ConditionalOutput(string stringoutput, int divisor, bool reverse = false)
{
return ((Iterations % divisor == 0) == !reverse ? stringoutput : "");
}
}
这允许您根据迭代次数进行嵌套条件格式化:
var outerloophelper = new LooperHelper();
var innerloophelper = new LooperHelper();
foreach (var product in products)
{
outerloophelper.AddTick();
<div class="row @(outerloophelper.ConditionalOuput("alternative", 2, true))">
@foreach (var subproduct in product.SubProducts)
{
innerloophelper.AddTick();
<div class="4u@(innerloophelper.ConditionalOutput("$", 3)) 12u$(small)">
@subproduct.ToString()
</div>
}
</div>
}
在上面的示例中,每个第二个产品都使用“alternative”类进行修饰(其中第一个标记为alternative,因为reverse设置为true)。嵌套的子产品项目进一步修饰,在类中添加了一个$符号,表示每三列的行更改。但是你也可以做其他漂亮的事情,例如确保在两者之间添加hr-tag,但不是在最后的循环元素之后,如下例所示:
@if (!outerloophelper.DivisibleBy(products.Count())) { <hr />}
简而言之,在初始化帮助程序时,它从0开始,并且在代码中定位AddTick()方法允许您调整迭代是以1还是0开始。