2012-03-04 8 views
5

Estoy utilizando la grilla de la IU Telerk Kendo que carga datos de forma remota. El QueryString pasado a mi método de acción es similar a esto: -Enlazar una QueryString que tenga matrices con MVC

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

Estoy tratando de encontrar la manera de enlazar el parámetro sort en mi método? ¿Es posible o debo enumerar manualmente la colección QueryString o crear una carpeta personalizada?

Hasta aquí he intentado esto: -

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

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

pero algo siempre es nula. ¿Alguien sabe cómo puedo lograr esto?

Puedo recurrir a Request.QueryString usando, pero esto es un poco complicado.

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

Respuesta

7

Se podría utilizar un conjunto de diccionarios:

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" 
    ... 
} 

y luego definir un modelo personalizado de aglutinante:

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; 
    } 
} 

que se registrará en Global.asax:

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

Gracias Darin, esta es una de las razones por las que ve Desbordamiento de pila. – Rippo

+0

Usar la matriz IDictionary para capturar los criterios de clasificación es la implementación más limpia que he encontrado en línea hasta ahora. Gracias. – YYL

Cuestiones relacionadas