2012-03-04 7 views
5

Używam siatki Telerk Kendo UI, która ładuje dane zdalnie. QueryString przeszedł w moim metody działania wygląda następująco: -Powiąż zapytanie QueryString z macierzą MVC

take=10&skip=0&page=1&pageSize=10&sort[0][field]=value&sort[0][dir]=asc 

Staram się wypracować jak powiązać parametr sort do mojej metody? Czy jest to możliwe, czy muszę wyliczyć ręcznie kolekcję QueryString lub utworzyć niestandardowy segregator?

Do tej pory próbowałem to: -

public JsonResult GetAllContent(int page, int take, int pageSize, string[] sort) 

public JsonResult GetAllContent(int page, int take, int pageSize, string sort) 

ale sortowania jest zawsze zerowa. Czy ktoś wie, jak mogę to osiągnąć?

Mogę wrócić do Request.QueryString za pomocą, ale jest to trochę kludge.

var field = Request.QueryString["sort[0][field]"]; 
var dir = Request.QueryString["sort[0][dir]"]; 

Odpowiedz

7

Można używać tablicy słowników:

public ActionResult Index(
    int page, int take, int pageSize, IDictionary<string, string>[] sort 
) 
{ 
    sort[0]["field"] will equal "value" 
    sort[0]["dir"] will equal "asc" 
    ... 
} 

a następnie zdefiniować niestandardowe spinacza modelu:

public class SortViewModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var modelName = bindingContext.ModelName; 
     var keys = controllerContext 
      .HttpContext 
      .Request 
      .Params 
      .Keys 
      .OfType<string>() 
      .Where(key => key.StartsWith(modelName)); 

     var result = new Dictionary<string, string>(); 
     foreach (var key in keys) 
     { 
      var val = bindingContext.ValueProvider.GetValue(key); 
      result[key.Replace(modelName, "").Replace("[", "").Replace("]", "")] = val.AttemptedValue; 
     } 

     return result; 
    } 
} 

który zostanie zarejestrowany w Global.asax:

ModelBinders.Binders.Add(typeof(IDictionary<string, string>), new SortViewModelBinder()); 
+0

Dzięki Darin, to jest jeden z powodów, dla których ve Przepełnienie stosu. – Rippo

+0

Używanie tablicy IDictionary do przechwytywania kryteriów sortowania jest najczystszą implementacją, jaką udało mi się znaleźć w Internecie. Dzięki. – YYL