Przejdź do treści

DevStyle - Strona Główna
Bindowanie napisu do tablicy intów w ASP MVC

Bindowanie napisu do tablicy intów w ASP MVC

Maciej Aniserowicz

16 czerwca 2011

Backend

Tagi:

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!

Zobacz również