這裏有個理論問題。先用Enum屬性代碼
我有一個屬性「狀態」,只能接受2個不同的值(打開,關閉),我想設置爲一個枚舉類型的屬性。在codefirst mvc應用程序中,應該在數據模型,視圖模型還是兩者中定義枚舉?
我傾向於使視圖模型的枚舉部分和此模型的codefirst屬性將只存儲枚舉的字符串值。然後,我只會使用automapper來回映射這兩個值。視圖模型的枚舉屬性將顯示爲單選按鈕。
想法?
這裏有個理論問題。先用Enum屬性代碼
我有一個屬性「狀態」,只能接受2個不同的值(打開,關閉),我想設置爲一個枚舉類型的屬性。在codefirst mvc應用程序中,應該在數據模型,視圖模型還是兩者中定義枚舉?
我傾向於使視圖模型的枚舉部分和此模型的codefirst屬性將只存儲枚舉的字符串值。然後,我只會使用automapper來回映射這兩個值。視圖模型的枚舉屬性將顯示爲單選按鈕。
想法?
這取決於。
1)如果您有其他可以訪問您的data model
(除了您的視圖)的代碼,那麼您可能希望此狀態屬性爲枚舉類型。所以這個第三方代碼不會破壞你的邏輯。無論如何,即使你現在沒有這樣的代碼,我建議你使用枚舉來實現向前兼容性:mabby你或其他開發者將在未來添加它。這是最佳做法。恕我直言,這是強制性的。
2)在視圖模型中使用枚舉怎麼樣?恕我直言,這是可選的。因爲如果您想驗證您的輸入您可能會在您的控制器操作方法中的服務器上執行此操作。如果您使用單選按鈕,則不需要驗證控制器中的輸入。只需在您的視圖中使用此代碼:
@model path.YourViewModel
@using YourEnumNamespace; /* where You defined Your Status enum */
@using (Html.BeginForm("YourMethod", "YourController", FormMethod.Post, null))
{
<fieldset>
<div>
@foreach (var enumValue in Enum.GetValues(typeof(Status)))
{
<div>
@Html.Label(enumValue.ToString())
@Html.RadioButtonFor(model => model.Title, enumValue)
</div>
}
</div>
<input type="submit" value="Save"/>
</fieldset>
}
只需枚舉枚舉值,如上面的代碼中所示。
總結:沒有必要使用視圖模型enum
類型,但它是思考向前兼容性和數據模型使用enum
類型一個很好的做法。
我通常在我的域模型和ViewModels中都有它們,Entity Framework會將它們映射到數據庫中的整數。我創建了一些html助手,爲我的ViewModel中的枚舉創建下拉列表。