Blazor 损坏 div
Blazor breaking div
我正在使用 .NET 5 和 blazor。
我很困惑为什么这段代码可以正常工作:
<div class="row">
<div class="col-md-4">
<DonutChart GadgetData="@DashboardData.GadgetData.ToList()[0]" />
</div>
<div class="col-md-4">
<DonutChart GadgetData="@DashboardData.GadgetData.ToList()[1]" />
</div>
<div class="col-md-4">
<DonutChart GadgetData="@DashboardData.GadgetData.ToList()[2]" />
</div>
</div>
但是当我尝试添加一些逻辑并尝试构建类似的结构时,它打破了我的 div 的:
@foreach (GadgetData gadgetData in DashboardData.GadgetData)
{
switch (GadgetCounter)
{
case 1:
@:<div class="row">
<div class="col-md-4">
<DonutChart GadgetData="@gadgetData" />
<br />
<p>@GadgetCounter</p>
</div>
break;
case 2:
<div class="col-md-4">
<DonutChart GadgetData="@gadgetData" />
<br />
<p>@GadgetCounter</p>
</div>
break;
case 3:
<div class="col-md-4">
<DonutChart GadgetData="@gadgetData" />
<br />
<p>@GadgetCounter</p>
</div>
@:</div>
GadgetCounter = 0;
break;
}
GadgetCounter += 1;
}
我还显示了计数器以确保它是正确的:
<p>@GadgetCounter</p>
是的,它正确显示了 1,2 和 3。
它创建的HTML是这样的:
<div class="row"></div>
<div class="col-md-4">
......
</div>
<div class="col-md-4">
......
</div>
<div class="col-md-4">
......
</div>
如您所见,行 div 不包含列 div。
有什么建议吗?
这样效果更好,但我仍然需要考虑 Take() 将包含 1 个或 2 个元素的情况。
for (int i = 0; i < DashboardData.GadgetData.Count(); i=i+3)
{
var items = DashboardData.GadgetData.Skip(i).Take(3);
<div class="row">
<div class="col-md-4">
<DonutChart GadgetData="@items.ToList()[0]" />
</div>
<div class="col-md-4">
<DonutChart GadgetData="@items.ToList()[1]" />
</div>
<div class="col-md-4">
<DonutChart GadgetData="@items.ToList()[2]" />
</div>
</div>
}
尝试使用下面的code.If i+3>=DashboardData.GadgetData.Count()
,only iterator from i
to DashboardData.GadgetData.Count()-1
.如果i+3<DashboardData.GadgetData.Count()
,only iterator from i
] 到 i+3
:
@for (int i = 0; i < DashboardData.GadgetData.Count(); i = i + 3)
{
var j = (i + 3 < DashboardData.GadgetData.Count()) ? i + 3:DashboardData.GadgetData.Count();
<div class="row">
@for (int k = i; k < j; k++)
{
<div class="col-md-4">
<DonutChart GadgetData="@DashboardData.GadgetData[k]" />
</div>
}
</div>
}
我正在使用 .NET 5 和 blazor。
我很困惑为什么这段代码可以正常工作:
<div class="row">
<div class="col-md-4">
<DonutChart GadgetData="@DashboardData.GadgetData.ToList()[0]" />
</div>
<div class="col-md-4">
<DonutChart GadgetData="@DashboardData.GadgetData.ToList()[1]" />
</div>
<div class="col-md-4">
<DonutChart GadgetData="@DashboardData.GadgetData.ToList()[2]" />
</div>
</div>
但是当我尝试添加一些逻辑并尝试构建类似的结构时,它打破了我的 div 的:
@foreach (GadgetData gadgetData in DashboardData.GadgetData)
{
switch (GadgetCounter)
{
case 1:
@:<div class="row">
<div class="col-md-4">
<DonutChart GadgetData="@gadgetData" />
<br />
<p>@GadgetCounter</p>
</div>
break;
case 2:
<div class="col-md-4">
<DonutChart GadgetData="@gadgetData" />
<br />
<p>@GadgetCounter</p>
</div>
break;
case 3:
<div class="col-md-4">
<DonutChart GadgetData="@gadgetData" />
<br />
<p>@GadgetCounter</p>
</div>
@:</div>
GadgetCounter = 0;
break;
}
GadgetCounter += 1;
}
我还显示了计数器以确保它是正确的:
<p>@GadgetCounter</p>
是的,它正确显示了 1,2 和 3。
它创建的HTML是这样的:
<div class="row"></div>
<div class="col-md-4">
......
</div>
<div class="col-md-4">
......
</div>
<div class="col-md-4">
......
</div>
如您所见,行 div 不包含列 div。 有什么建议吗?
这样效果更好,但我仍然需要考虑 Take() 将包含 1 个或 2 个元素的情况。
for (int i = 0; i < DashboardData.GadgetData.Count(); i=i+3)
{
var items = DashboardData.GadgetData.Skip(i).Take(3);
<div class="row">
<div class="col-md-4">
<DonutChart GadgetData="@items.ToList()[0]" />
</div>
<div class="col-md-4">
<DonutChart GadgetData="@items.ToList()[1]" />
</div>
<div class="col-md-4">
<DonutChart GadgetData="@items.ToList()[2]" />
</div>
</div>
}
尝试使用下面的code.If i+3>=DashboardData.GadgetData.Count()
,only iterator from i
to DashboardData.GadgetData.Count()-1
.如果i+3<DashboardData.GadgetData.Count()
,only iterator from i
] 到 i+3
:
@for (int i = 0; i < DashboardData.GadgetData.Count(); i = i + 3)
{
var j = (i + 3 < DashboardData.GadgetData.Count()) ? i + 3:DashboardData.GadgetData.Count();
<div class="row">
@for (int k = i; k < j; k++)
{
<div class="col-md-4">
<DonutChart GadgetData="@DashboardData.GadgetData[k]" />
</div>
}
</div>
}