我有一個模型,它看起來是這樣的:在ASP.NET中使用的SelectList掙扎MVC 2
public class SampleModel
{
public static SampleModel Create()
{
return new SampleModel
{
Boolean = true,
// set several more properties...
Colors = new SelectList(new[] { "Red", "Green", "Blue" }, "Green")
};
}
public bool Boolean { get; set; }
// define several more properties...
public SelectList Colors { get; set; }
}
我讓我的詳細信息查看和Html.EditorForModel()
ASP.NET MVC的腳手架自動使用Html.DisplayForModel()
屬性我的編輯視圖。
結果:
編輯視圖的偉大工程。
Colors
顯示爲包含三個項目(紅色,綠色和藍色)的菜單,默認情況下選擇綠色。但是,對於Details視圖,我會得到「False True False」,這顯然是菜單中每個項目的
IsSelected
值的列表。這絕對不是我想要的。我希望它只顯示「綠色」。另一個問題是,如果我嘗試在我的控制器中執行
UpdateModel(sampleModel)
,則會出現錯誤「沒有爲此對象定義無參數構造函數」。這大概是因爲Colors
是SelectList
,並且SelectList
沒有無參數的構造函數,所以它無法完成綁定。
所以,我想我明白有什麼問題,但我真的可以使用的這種情況下,這似乎拿出了很多,當你有機型外鍵對象一個很好的解決方案。
一些問題:
- 我怎麼
Colors
露面作爲編輯視圖菜單,但只是一個簡單的字符串值(例如,「綠色」)的詳細信息視圖? - 如何在更新包含
SelectList
的模型時防止「無參數構造函數」錯誤? - 如果我的Model/ViewModel實際上包含外鍵
ColorId
而不是Colors
,那麼獲取Details視圖顯示當前顏色名稱和Edit視圖以顯示包含所有在我的數據庫的Color
表中列出的顏色名稱。如果有幫助,我使用LinqToSql(SqlMetal)來生成我的模型類。
確實,單獨的編輯和視圖模型不會導致具有許多相同屬性的類對,但它也使修改一個視圖非常容易,而不會影響其他視圖。我更謹慎地保持我的邏輯DRY,而不是我的DTO。你也可以有一個視圖模型來自另一個視圖模型,但除非你的視圖非常簡單,否則這可能比它的價值更麻煩。 –