在ASP.NET MVC 3中以编程方式创建routeValues(匿名类型)

假设我们有一个页面,其中包含一些支持从DB搜索的元素,因此在Post Action中我们需要找到哪些元素是活动的,并根据这些创建路由值,如下所示:

List 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类似于以下Pseudo-Code:

 var dynamicRoutValues; foreach(Parameter item in SearchParameters) { dynamicRoutValues.Add(item.Name, item.Value) } return RedirectToAction("Index", dynamicRoutValues); 

您可以使用RouteValueDictionary

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

如果SearchParameters实现了IDictionary那么您可以将它直接传递给RouteValueDictionary构造函数:

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