这里的理论问题。
我有一个属性“Status”,它只能接受2个不同的值(打开,关闭),我想将它们设置为枚举类型的属性。在codefirst mvc应用程序中,是应该在数据模型中,在viewmodel中还是在两者中定义枚举?
我倾向于制作视图模型的枚举部分,此模型的codefirst属性只存储枚举的字符串值。然后,我将使用automapper来回映射2个值。 viewmodel的enum属性将显示为radiobutton。
思想?
答案 0 :(得分:1)
这取决于。
1)如果您有其他代码可以访问您的data model
(除了您的视图),那么您可能希望此Status属性为枚举类型。这样第三方代码就不会破坏你的逻辑。无论如何,即使你现在没有这样的代码,我建议你使用枚举来实现向前兼容:mabby你或其他开发者将来会添加它。这是一种最佳实践。恕我直言,这是强制性的。
2)在视图模型中使用枚举怎么样?恕我直言,这是可选的。因为如果您想验证您的输入您可能会在您的控制器操作方法中在服务器上执行此操作。如果使用radiobuttons,则甚至不需要验证控制器中的输入。只需在您的视图中使用它:
@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>
}
只需枚举枚举值,如上面的代码所示。
总结一下:不需要在viewmodel中使用enum
类型,但最好考虑向前兼容性并在datamodel中使用enum
类型。
答案 1 :(得分:0)
我通常在我的域模型和ViewModels中都有它们,Entity Framework会将它们映射到数据库中的整数。我创建了一些html助手,为我的ViewModel中的枚举创建下拉列表。