2012-04-21 14 views
8

Supongamos que tenemos una página que incluye algunos elementos para admitir la búsqueda de DB, por lo que en Post Action necesitamos encontrar qué elementos están activos y de acuerdo con eso crear valores de ruta algo como esto:Cree routeValues ​​(tipo anónimo) programáticamente en ASP.NET MVC 3

List<Parameter> SearchParameters = GetFilterParameters(collection); 


if(SearchParameters.Count > 0) 
foreach(Parameter item in SearchParameters) { 

    switch(item.Name) { 
        case "Category": 
        CategoryValue= item.Value; 
         break; 

        case "StartDate": 
        StartDateValue= item.Value; 
         break; 


        case "Product": 
        ProductValue= item.Value; 
         break; 

       } 
return RedirectToAction("Index", new {category = CategoryValue, startdate=StartDateValue, product=ProductValue }); 

Entonces, ¿hay alguna manera de definir dinámicamente routeValues algo así como lo siguiente pseudo-código:

var dynamicRoutValues; 
foreach(Parameter item in SearchParameters) { 

    dynamicRoutValues.Add(item.Name, item.Value) 

} 

    return RedirectToAction("Index", dynamicRoutValues); 

Respuesta

17

se puede utilizar un RouteValueDictionary:

var dynamicRoutValues = new RouteValueDictionary(); 
foreach(Parameter item in SearchParameters) { 
    dynamicRoutValues[item.Name] = item.Value; 
} 

return RedirectToAction("Index", dynamicRoutValues); 

Si SearchParameters implementado IDictionary<string, object> entonces usted podría pasar directamente a la RouteValueDictionary constructor:

return RedirectToAction("Index", new RouteValueDictionary(SearchParameters));