我正在使用ASP.NET MVC
,我有以下模型类:
public enum ListType
{
black,
white
}
public class ListAddSiteModel : ApiModel
{
[RequestParameter]
public ListType list { get; set; }
}
但它不按我想要的方式工作。当我没有在请求的URL
中传递list参数时,我的列表是black
。但我希望如果list参数不是black
或white
字符串,那么list
必须为null。是否可以编写自定义属性[IsParsable]
,只需将其添加到列表属性即可。
public class ListAddSiteModel : ApiModel
{
[RequestParameter]
[IsParsable]
public ListType list { get; set; }
}
答案 0 :(得分:4)
轻松出路:
public enum ListType
{
novalue = 0,
black,
white
}
虚拟必须是第一个(映射到0 == default(Enum)
)
答案 1 :(得分:2)
传递不黑色或白色的值的唯一方法是传递int
。您可以通过在调用Enum.IsDefined的setter中添加一个检查来阻止这种情况,例如:
ListType? _listType;
public ListType? List
{
get
{
return _listType;
}
set
{
//Enumb.IsDefined doesn't like nulls
if (value==null || Enum.IsDefined(typeof(ListType),value))
_listType=value;
else
_listType=null;
}
}
你也可以将它与Henk Holterman的答案结合起来,并在你的枚举中添加一个等于0的NA
成员。这可能会使您的代码更容易阅读。
在这两种情况下,您的代码都必须处理特殊值(NA
或null
)。使用可空类型会让人更难忘记这一点,但是会稍微丢掉你的代码。