2012-05-11 107 views
5

我有一個Razor視圖,包含大量從控制器獲取數據的圖形和其他文本字段。我想從控制器傳遞ViewModel到視圖,然後解析相關內容並顯示它。ASP.NET MVC 3 - ViewModel最佳實踐

任何人都可以建議,如果上述方法是最好的做法來解決這樣的,在MVC?

ViewModel類可能看起來像下面:

public class ViewModelDemo 
{ 
    public MyChart chart {get;set;} 
    public string LeftContent {get;set} 
    public string bottomContent {get;set;} 
    public ChartLeged legent {get;set} 
    ...... 
} 

public class MyChart 
{ 
    public List<int> xAxis {get;set} 
    public List<int> yAxis {get;set;} 
    ...... 
} 

原因,我試圖返回ViewModel是,有可能是具有不同的數據頁面的部分。

+0

你的意思是不是好事,有嵌套的ViewModels?我也很有趣,並且也是這樣做的(我的意思是嵌套)。我有幾個邏輯部分的頁面,也只有一個嵌套的viedmodels可以重新查詢(取決於ajax或回發請求)。所以我希望你是對的) –

+1

由於我們談論的是良好實踐:使用與框架/語言相同的命名約定被認爲是一種很好的做法。在這種情況下,.NET/C#爲公共屬性使用適當的外殼。所以你應該改變你的屬性名稱爲「Chart」,「BottomContent」,「Legend」(正確的拼寫),「XAxis」和「YAxis」。 – Omar

回答

2

我認爲你的解決方案是一致的。

另一種方法可能是將大剃刀視圖分成更小的局部視圖,每個視圖都有一個更簡單的視圖模型。這對於可讀性,責任分離等等是有用的。

3

絕對如此。 ViewModel是解決這個問題的完美解決方案。見巴勒莫的出色MVC行動書的第12.1.5(方便快捷的免費樣品)

另一種選擇是創建我們從域模型視圖 一個單獨的視圖模型類型。我們將創建一個專門的類,只爲 這一個視圖。不管我們喜歡什麼,我們都可以塑造這種類型,然後允許視圖根據我們的需要塑造我們的視圖模型。 獨立視圖模型的優點是我們的視圖不會以任何方式影響域 模型。對於不那麼複雜的應用,這種分離不是必需的,並且過分複雜的設計。隨着 視圖的複雜性增加,視圖的設計對我們的域模型的影響越來越大,除非視圖模型和域模型分離爲 。

http://www.manning.com/palermo/Samplechapter12.pdf