2013-02-15 140 views
0

創建行動有道,我有以下在我的控制器:使用的ViewModels在MVC

[HttpGet] 
public ActionResult Create(int setId) 
{ 
    // create new viewModel 
    var model = new CreateCardViewModel() {SetId = setId, Sides = new List<string>(){"Front Side", "Back Side"}}; 

    return View(model); 
} 

我應該整型傳遞給CreateCardViewModel構建模型?或者這種方法是否合適?

ViewModels是否經常包含業務邏輯?

回答

0

ViewModel的不包含業務邏輯。它們基本上是輸出到視圖的虛擬類。

我不會說有一個'正確'的方式來加載ViewModel,但有多種方法可以做到這一點。我個人加載任何默認值在viewmodel的構造函數方法的頁面,並加載任何頁面特定的東西在控制器中,就像你在你的例子。

我也使用基本viewmodel設置爲_layout頁面的模型。這持有像你的網頁標題/元件/等東西。

例如

public abstract class BaseViewModel 
{ 
    public string Title {get;set;} 

} 

public sealed class HomeViewModel : BaseViewModel 
{ 
    public string HomeText {get;set;} 
} 

我不認爲有正確或錯誤的方式,只是使用你覺得舒適的技術。

0

如果你想確保對象在一個地方被裝箱,構造函數很有用。它們有助於避免以無效狀態初始化對象的情況(例如,您忘記設置其中一個對象屬性,這是進一步處理所需的屬性)。在視圖模型的情況下可以有輸出模型的構造函數。但是你不能使用構造函數來處理輸入模型(動作方法的參數),因爲它們被需要公共構造函數的MVC運行時反序列化。