2011-06-15 106 views
2

假設我在view部分有這個div:MVC模式:顯示元素數組的最佳方式

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

那裏沒有問題:我只是從我的類/ bean(model)獲取我的數據並將其放在div上。

現在,假設myVariableToPrint是一個包含10個字符串的數組,我需要打印div 10次,每個div都爲數組上的每個字符串。我該怎麼做?

把div放在模型上:

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

並在view部分打印myString它很吵:)

任何解決方案?

P.s.我在談論C#,但在Java ecc

上應該是相同的
+2

我不會在模型中添加任何HTML。假設你有不同的觀點,取決於相同的數據?比HTML可能會有所不同。打印數組只是查看邏輯,所以沒有什麼問題。 – Alec 2011-06-15 15:31:44

+1

我更新了我的答案以顯示另一個解決方案 – fearofawhackplanet 2011-06-15 16:50:46

回答

3

只要把<div>內環路

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

更新 好了,從你的評論看起來你不想視圖中的任何循環邏輯。真的,你不應該擔心這一點。視圖有這樣的東西。它可能看起來有點混亂,但它通常是正確的做事方式。把html放在你的模型中,以便你可以渲染它是絕對是一個壞主意。請不要這樣做。

你能做到這將是一個自定義Html.Helper method.You可以做類似的另一種方式....

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") %> 

這是一個很多整潔。

+0

這是一個XSS洞。 – SLaks 2011-06-15 15:32:39

+0

爲什麼?誰說他在渲染用戶輸入?無論如何,我只是用他的原始片段來顯示答案。這是一個關於如何在視圖中進行循環的問題,而不是如何對用戶輸入進行編碼。 – fearofawhackplanet 2011-06-15 15:35:55

+0

是的,但在視圖上有許多模型元素(對於每個,如果,ecc)並不是很好:) @ SLaks♦:爲什麼選擇XSS洞? – markzzz 2011-06-15 15:36:31

1

將集合放入模型中。

視圖遍歷集合以創建最終輸出。

+0

您能給我一個例子嗎? – markzzz 2011-06-15 15:30:17

+0

@markzzz查看其他答案。 – Richard 2011-06-15 15:31:24

2

您應該使用foreach循環迭代集合,並將HTML放入循環中。

使用剃刀(因爲它更容易):

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

在視圖中的foreach? :O – markzzz 2011-06-15 15:30:52

+0

@markzz,視圖中的foreach有什麼問題? – Illuminati 2011-06-15 15:32:36

+0

@ mark:是;這是標準做法。 – SLaks 2011-06-15 15:32:50

相關問題