2012-04-21 14 views
8

Supponiamo di disporre di una pagina che include alcuni elementi per supportare la ricerca dal DB, quindi in Post azione dobbiamo trovare quali elementi sono attivi e in base a tale creare i valori del percorso qualcosa di simile:Crea routeValues ​​(tipo anonimo) a livello di codice in 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 }); 

Quindi non v'è alcun modo per definire dinamicamente routeValues qualcosa, come i seguenti pseudo-codice:

var dynamicRoutValues; 
foreach(Parameter item in SearchParameters) { 

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

} 

    return RedirectToAction("Index", dynamicRoutValues); 

risposta

17

è possibile utilizzare un RouteValueDictionary:

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

return RedirectToAction("Index", dynamicRoutValues); 

Se SearchParameters implementate IDictionary<string, object> allora si potrebbe passare direttamente al costruttore RouteValueDictionary:

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