Standardowo jeśli chcemy przekazać w URLu tablicę w MVC to wysyłamy po prostu wiele wartości o tej samej nazwie, np ?array=1&array=2&array=3. Może się jednak zdarzyć, że przydałoby się to jakoś “skompaktować”, na przykład do takiej postaci: ?array=1,2,3. Co wtedy?
Da się to osiągnąć w dość prosty sposób implementując własny ModelBinder:
1: public class CommaSeparatedIntArrayModelBinder : IModelBinder 2: { 3: public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 4: { 5: var result = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 6: 7: if (result == null) 8: return null; 9: 10: if (result.AttemptedValue.HasNoText()) 11: return null; 12: 13: return result.AttemptedValue.Split(',').Select(x => int.Parse(x)).ToArray(); 14: } 15: }
Potem tylko rejestrujemy go w Global.asax:
1: ModelBinders.Binders[typeof (int[])] = new CommaSeparatedIntArrayModelBinder();
i gra muzyka!