我成功地制作了 Enum 活页夹,从 iv 测试的结果来看,一切正常。但我想在我的控制器中有可为空的枚举参数,当我更改为可为空时,我的活页夹不起作用。
public class EnumBinder<T> : IModelBinder
{
private object DefaultValue { get; set; }
public EnumBinder(object defaultValue)
{
DefaultValue = defaultValue;
}
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var result = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if(result == null || string.IsNullOrEmpty(result.AttemptedValue))
{
return DefaultValue;
}
return GetEnumValue<T>(result.AttemptedValue);
}
public static object GetEnumValue<T>(string value)
{
var enums = Enum.GetValues(typeof (T)).Cast<T>().ToList();
foreach (var e in enums)
{
var _enum = Enum.Parse(typeof (T), e.ToString());
if (string.Equals(value, _enum.ToString(), StringComparison.InvariantCultureIgnoreCase))
{
return _enum;
}
}
return null;
}
}
适用于
public virtual ActionResult ControllerName(Status status)
{
return View();
}
但不工作
public virtual ActionResult ControllerName(Status? status)
{
return View();
}
当然,我已经在申请开始时注册了我的活页夹
ModelBinders.Binders.Add(typeof(CallStatus), new EnumBinder<CallStatus>(null));
我做错了什么,为什么我不能在我的控制器中返回可为空的枚举?