我可能在这里违反了一些惯例。我有一个来自模型的字典,其配对数量未知。我想显示所有键/值对,但以五个为单位打破显示的列。我认为这样可行:
<div class="substatus_group">
<span class="title">Substatus</span>
@{int i =0}
@foreach (var item in Model.substatus)
{
if(i > 1 && i % 5 == 0)
{
</div><div>
}
<span class="rtm_substatus">@item.Key: @item.Value</span>
i++;
}
</div>
相反,结束div上的括号表示它缺少它的开始,而if循环表示它缺少它的右括号。页面永远不会呈现。
显然,Razer并没有将代码解释为代码,而是选择将代码标记为html /代码。我想知道如何强制Razer正确渲染它。如果存在动态创建标签的更好解决方案,那也是一个很好的答案。
答案 0 :(得分:0)
这个怎么样?使用for循环来管理索引,并检查每次迭代的模数,而不是跳过第一个。
MVC3 / Razor似乎不喜欢在不同的范围内拥有开始和结束标签。
我能够通过使用局部视图和一些Linq将字典分成不同的“块”来解决这个问题。
您的观点:
@{
string[] keys = Model.Keys.ToArray();
for (int i = 0; i < keys.Length; i += 5)
{
Html.RenderPartial("_partialView", Model.Skip(i).Take(5));
}
}
您的部分观点:
<div class="substatus_group">
@foreach (KeyValuePair<string, string> item in Model)
{
<span class="title">Substatus</span> <span class="rtm_substatus">@item.Key: @item.Value</span>
}
</div>