MVC3动态关闭标签

时间:2011-07-13 22:18:20

标签: asp.net-mvc-3

我可能在这里违反了一些惯例。我有一个来自模型的字典,其配对数量未知。我想显示所有键/值对,但以五个为单位打破显示的列。我认为这样可行:

<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正确渲染它。如果存在动态创建标签的更好解决方案,那也是一个很好的答案。

1 个答案:

答案 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>