2012-03-04 19 views
5

Sto utilizzando la griglia UI Telerk Kendo che carica i dati in remoto. Il QueryString passato nel mio metodo di azione assomiglia a questo: -Associare un oggetto QueryString con array MVC

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

Sto cercando di capire come associare il parametro sort nel mio metodo? È possibile o devo enumerare manualmente la collezione QueryString o creare un raccoglitore personalizzato?

Finora ho provato questo: -

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

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

ma una sorta è sempre nullo. Qualcuno sa come posso ottenere questo?

Posso ricorrere a Request.QueryString utilizzando, ma questo è un po 'un kludge.

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

risposta

7

Si potrebbe utilizzare una serie di dizionari:

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

e quindi definire un modello personalizzato legante:

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

che sarà registrato in Global.asax:

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

Grazie Darin, questo è uno dei motivi per cui ve Overflow dello stack. – Rippo

+0

L'utilizzo della matrice IDictionary per acquisire i criteri di ordinamento è l'implementazione più pulita che ho trovato finora online. Grazie. – YYL

Problemi correlati