2012-08-09 31 views
0

應該是一個例如Customer或CustomerViewModel?ListViewModel中的模型或ViewModel

綁定到Mvc名稱空間的註釋位於ListViewModel上,所以實際上我可以傳遞Customer對象。你怎麼看?

public class ListViewModel<T> 
{ 
     [Required(ErrorMessage="No item selected.")] 
     public int[] SelectedIds { get; set; } 
     public IEnumerable<T> DisplayList { get; set; }   
} 

UPDATE

[HttpGet] 
public ActionResult Open() 
{ 
    IEnumerable<Testplan> testplans = _testplanDataProvider.GetTestplans(); 
    OpenTestplanListViewModel viewModel = new OpenTestplanListViewModel(testplans);   
    return PartialView(viewModel); 
} 

public class OpenTestplanListViewModel 
{ 
     public OpenTestplanListViewModel(IEnumerable<Testplan> testplans) 
     { 
      var testplanViewModels = testplans.Select(t => new TestplanViewModel 
      { 
      Name = string.Format("{0}-{1}-{2}-{3}", t.Release.Name, t.Template.Name, t.CreatedAt, t.CreatedBy), 
       TestplanId = t.TestplanId, 
      }); 

      DisplayList = testplanViewModels; 
     } 

     [Required(ErrorMessage = "No item selected.")] 
     public int[] SelectedIds { get; set; } 
     public string Name { get; set; } 
     public IEnumerable<TestplanViewModel> DisplayList { get; private set; } 
} 

public class TestplanViewModel 
{ 
     public int TestplanId { get; set; }  
     public string Name { get; set; }   
} 

public class Testplan 
{ 
     public int TestplanId { get; set; } 
     public int TemplateId { get; set; } 
     public int ReleaseId { get; set; } 
     public string CreatedBy { get; set; }  
     public DateTime CreatedAt { get; set; }  
     public Template Template { get; set; } 
     public Release Release { get; set; } 
} 

回答

0

T最好應有視圖模型。有一個視圖模型引用領域模型是某種混合視圖模型,而不是真實模型。但是如果你認爲在這種特定情況下,領域模型將與視圖模型完全相同,那麼你可以保留它。

+0

我已經用完成的代碼示例更新了我的問題。我正在將我的數據庫中的測試計劃列表傳遞給viewmodel的ctor。我的Testplan業務對象與我的TestplanViewModel看起來很不一樣。有什麼需要改進的嗎?順便說一句。我刪除了通用視圖模型。 – Elisabeth 2012-08-09 18:07:44

+0

您的OpenTestplanListViewModel視圖模型沒有默認的構造函數。這是有問題的,因爲如果您決定將此視圖模型用作動作參數,它將無法工作,因爲默認的模型聯編程序不會知道如何實例化它。另外你的'DisplayList'屬性的setter是私有的,默認的模型聯編程序將不能調用它。當然,如果你不打算使用這個視圖模型作爲動作參數,而只是將它傳遞給視圖,那麼這樣的自定義構造函數沒有問題。 – 2012-08-10 06:16:50

+0

哈哈很好的答案。現在你說過了,我再次記住......我發現了另一個帶有2個構造函數的ViewModel,我不記得我爲什麼這麼做了......我糾正了你的2個評論者,因爲這個vm是作爲動作參數生成的。謝謝Darin。 – Elisabeth 2012-08-10 07:26:58