2011-07-13 66 views
0

我可能会在这里打破一些约定。我有一个来自模型的字典,其对数不详。我想要显示所有的键/值对,但打破显示的列数为五。我认为这会工作:MVC3关闭标签Dyanmically

<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托架说,它缺少的开始,而如果环说,它缺少右括号。该页面不会呈现。

很显然,Razer并没有将代码解释为它的写法,而是在相反的情况下选择标记为html/code。我想知道如何强制Razer正确渲染。如果存在更好的解决方案来动态创建标签,那也是一个很好的答案。

回答

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> 
+0

字典没有索引。 Item = Model.substatus [i]不是有效的代码。 – Tyrsius

+0

但是,在循环内部打开和关闭可能会起作用。我会在星期一尝试这个。 – Tyrsius

+0

@Tyrsius我编辑了代码来为字典工作。 –