I successfully made Enum binder and from what iv tested, everything works. But i want to have nullable enum parameter in my controller and when i change to nullable, my binder dont work.
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;
}
}
Works on
public virtual ActionResult ControllerName(Status status)
{
return View();
}
but dont work on
public virtual ActionResult ControllerName(Status? status)
{
return View();
}
Of course i have registered my binder on application start
ModelBinders.Binders.Add(typeof(CallStatus), new EnumBinder<CallStatus>(null));
What i do wrong, why i cant return nullable enum in my controller?