2012-04-21 60 views
8

假设我们有一个页面包含一些元素以支持从DB进行搜索,因此在Post Action中我们需要找到哪些元素是活动的并根据创建的路由值是这样的:在ASP.NET MVC中以编程方式创建routeValues 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 }); 

那么,有没有办法定义routeValues动态的东西,如以下伪代码:

var dynamicRoutValues; 
foreach(Parameter item in SearchParameters) { 

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

} 

    return RedirectToAction("Index", dynamicRoutValues); 

回答

17

您可以使用RouteValueDictionary

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

return RedirectToAction("Index", dynamicRoutValues); 

如果SearchParameters实施IDictionary<string, object>,那么你可以直接将它传递给RouteValueDictionary构造:

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