MVC模式:显示元素数组的最佳方式

时间:2011-06-15 15:27:08

标签: c# java model-view-controller frameworks

假设我在view部分有这个div:

<div class='my class'>
    <%=myVariableToPrint %>
</div>

那里没有问题:我只是从我的类/ bean(model)获取我的数据并将其放在div上。

现在,假设myVariableToPrint是一个包含10个字符串的数组,我需要打印div 10次,每个div都为数组上的每个字符串。我该怎么办?

将div放在模型上,如:

myString+="<div class='my class'>"+myVariable[i]+"</div>" 

并在myString部分打印view嘈杂:)

任何解决方案?

P.S。我在谈论C#,但在Java ecc上应该是相同的

3 个答案:

答案 0 :(得分:3)

只需将<div>放入循环

即可
<% foreach (var item in myArray) { %>
    <div class='my class'>
        <%= item %>
    </div>
<% } %> 

<强>更新 好的,从您的评论中看起来您不希望视图中出现任何循环逻辑。真的你不应该担心。观点有这样的东西。它可能看起来有点乱,但它通常是正确的做事方式。将html放在你的模型中以便你可以渲染它绝对是一个非常糟糕的主意。请不要这样做。

另一种方法是使用自定义Html.Helper方法。你可以做类似......

public static string DivList(this HtmlHelper helper, IList<string> list, string divClass)
{
    var sb = new StringBuilder();
    foreach(string item in list)
    {
        sb.AppendFormat("<div class=\"{0}\">{1}</div>", divClass, item); 
    }     
    return sb.ToString();
}

您可以在视图中使用它,如...

<%= Html.DivList(Model.MyList, "myClass") %>

这是一个很整洁。

答案 1 :(得分:2)

您应该使用foreach循环迭代集合,并将HTML放入循环中。

使用Razor(因为它更容易):

@foreach(string s in something {
    <div class="Something">@s</div>
}

答案 2 :(得分:1)

将该集合放入模型中。

视图遍历集合以创建最终输出。