3
DefaultModelBinder가 열거 형 목록에 바인딩되는 방식을 변경하려는 시나리오가 있습니다.List에 바인딩 할 때 DefaultModelBinder가 빈 항목을 무시하도록 할 수 있습니까? <Enum>
내가 열거를...
public enum MyEnum { FirstVal, SecondVal, ThirdVal }
및 모델에 대한 클래스 ...
public class MyModel
{
public List<MyEnum> MyEnums { get; set; }
}
과 POST의 몸은 ...
MyEnums=&MyEnums=ThirdVal
현재 모델 바인딩 후, MyEnums 속성은 다음을 포함합니다 ...
[0] = FirstVal
[1] = ThirdVal
MyEnums 속성이 다음과 같이 보이도록 게시 된 데이터의 빈 값을 모델 바인더가 무시하도록 지시하는 방법이 있습니까?
public class MyModelModelBinder : DefaultModelBinder
{
protected override void SetProperty(
ControllerContext controllerContext,
ModelBindingContext bindingContext,
PropertyDescriptor propertyDescriptor,
object value)
{
if (value is ICollection<MyEnum>)
{
var myEnums = controllerContext.HttpContext.Request[propertyDescriptor.Name];
if (!string.IsNullOrEmpty(myEnums))
{
var tokens = myEnums.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries);
value = tokens.Select(x => (MyEnum)Enum.Parse(typeof(MyEnum), x)).ToList();
}
}
base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
}
}
Application_Start
에 등록 :
[0] = ThirdVal
나는 고마워. Enum 유형에 대해 어떻게 작동하는지 알 수 있습니까? – JeremyWeir
예, 내 업데이트를 참조하십시오. –
와우, 정말 잘 했어. 고마워. – JeremyWeir