2013-04-30 104 views
3

你好,我有一個簡單的問題,我認爲,MVC4剃刀模板像

我有這樣一個CSHTML:

<div id="box"> 
    @if (model.View == "item1") 
    { 
     <div id="item1"> 
      ... 
     </div> 
    } 
    else 
    { 
     <div id="item2"> 
      ... 
     </div> 
    } 
    <div id="itemDescription"> 
     ... 
    </div> 
</div> 

當我通過模型傳遞參數取決於參數顯示一些內容,因爲在這兩種情況下文檔的其餘部分是相同的。

是否有另一種更好的方法來實現這一目標?

謝謝!

+0

是否會有在每個'item1'太多的內容和'item2'那麼你最好把他們的部分意見。另外,你可以創建一個html助手,並讓它決定顯示哪個視圖並構建/調用視圖。 – 2013-04-30 12:06:11

+0

您確定要這麼做嗎?也許它正在工作,但它有點吸吮; p添加任何東西都會很痛苦。 – nilphilus 2013-04-30 12:10:46

+0

是的,我已經爲每個div做了部分視圖,這只是一個簡單的例子。如果我創建一個HtmlHelper,我也必須傳遞一個參數,我想,它會比我所採用的解決方案有一些優勢嗎? – gonzalomelov 2013-04-30 12:11:59

回答

3

不是真的;這是一個完美的做事方式。如果DIV ID總是model.View值相匹配,可以縮短到這一點:

<div id="box"> 
    <div id="@(model.View)"> 
     ... 
    </div> 
    <div id="itemDescription"> 
     ... 
    </div> 
</div> 

否則,你的做法是好的。按照馮五世的評論,你可能要考慮局部視圖如果包含的標籤是囉嗦(或者你需要重複在多個地方邏輯):

http://www.asp.net/mvc/videos/mvc-2/how-do-i/how-do-i-work-with-data-in-aspnet-mvc-partial-views

+0

謝謝!唯一我不喜歡的是傳遞字符串參數並在視圖中進行比較。但我不能認爲在另一個更好的解決方案.. – gonzalomelov 2013-04-30 12:14:20

+0

這是表示邏輯,所以視圖是它屬於的地方。這是完全可以接受的,並與MVC範式保持一致,以這種方式來完成任務。 – 2013-04-30 12:16:15

4

你的做法是好的,如果有在這兩個div中並不多。否則,創建兩個局部視圖,以幫助保持整潔:

@if (model.View == "item1") 
{ 
    @Html.RenderPartial("Item1"); 
} 
else 
{ 
    @Html.RenderPartial("Item2"); 
} 
+0

+1如果涉及部分內容,這是如何將數據傳遞給它們的一個完整示例。我在這個問題上外推,以表明像'@HtmlRenderPartial(model.View)'這樣簡單的東西可能也很好。 – 2013-04-30 12:15:07

+0

是的,我已經有一些局部視圖。就像我評論的那樣,我不喜歡字符串比較來選擇渲染某些視圖。謝謝! – gonzalomelov 2013-04-30 12:15:22