1

理论问题在这里。

我有一个属性“状态”,它只能接受 2 个不同的值(打开、关闭),我想将其设置为枚举类型的属性。在 codefirst mvc 应用程序中,枚举应该在数据模型中、视图模型中还是两者中定义?

我倾向于将枚举作为视图模型的一部分,并且该模型的 codefirst 属性将只存储枚举的字符串值。然后,我将使用 automapper 来回映射 2 个值。viewmodel 的 enum 属性将显示为单选按钮。

想法?

4

2 回答 2

1

这取决于。

1)如果您有其他代码可以访问您的data model(除了您的视图),那么您可能希望此 Status 属性为枚举类型。这样第三方代码就不会破坏您的逻辑。无论如何,即使您现在没有这样的代码,我建议您使用 enum 来实现前向兼容性: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>
}

只需像上面的代码一样枚举枚举值。

总结一下:在viewmodel中没有必要使用enumtype,但是在datamodel中考虑前向兼容性和使用enumtype是一个很好的做法。

于 2013-10-09T14:14:47.800 回答
0

我通常在我的域模型和 ViewModel 中都有它们,Entity Framework 会将它们映射到数据库中的整数。我创建了一些 html 助手,它们为我的 ViewModel 中的枚举创建下拉列表。

于 2013-10-09T07:22:58.540 回答