私は列挙型バインダーを正常に作成し、ivがテストしたものから、すべてが機能します。しかし、コントローラーにnull許容の列挙型パラメーターを設定したいのですが、null許容に変更すると、バインダーが機能しません。
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));
何が間違っているのですか、なぜコントローラーでnull許容列挙型を返すことができないのですか?