我需要生成这个URL:http:// localhost:3178 / Reports /?GroupId = 1211& GroupId = 1237
我尝试着:
- var routeData = new RouteValueDictionary();
- routeData.Add("GroupId","1,2");
得到:GroupId = 1,2
要么
- routeData.Add("GroupId","1");
- routeData.Add("GroupId","2");
乃至
- routeData.Add("GroupId[0]","1");
- routeData.Add("GroupId[1]","2");
得到:?GroupId [0] = 1& GroupId [1] = 2
有可能以某种方式修复我的问题?
解决方法
RouteValueDictionary旨在为路由提供信息.因此,我认为它没有你所要求的能力.我一直在使用自定义帮助器根据我传入的内容填充查询字符串数据:
- public static string BuildPath(RequestContext context,string routeName,RouteValueDictionary routeValues,object additionalParams)
- {
- var vpd = RouteTable.Routes[routeName].GetVirtualPath(context,routeValues);
- if (vpd == null)
- return string.Empty;
- var virtualpath = vpd.VirtualPath;
- var addparams = BuildAdditionalParams(additionalParams);
- if (!virtualpath.Contains("?") && addparams.Length > 0)
- virtualpath = virtualpath + "?" + addparams;
- else if (virtualpath.Contains("?") && addparams.Length > 0)
- virtualpath = virtualpath + "&" + addparams;
- return "/" + virtualpath;
- }
- protected static string BuildAdditionalParams(object additionalParams)
- {
- if (additionalParams == null)
- return string.Empty;
- StringBuilder sb = new StringBuilder();
- Type type = additionalParams.GetType();
- PropertyInfo[] props = type.GetProperties();
- Action<string,string> addProperty = (name,value) =>
- {
- if (sb.Length > 0)
- sb.Append("&");
- sb.Append(name);
- sb.Append("=");
- sb.Append(value);
- };
- foreach (PropertyInfo prop in props)
- {
- var simplevalue = prop.GetValue(additionalParams,null);
- if (simplevalue != null)
- {
- Type propertyType = prop.PropertyType;
- if (Nullable.GetUnderlyingType(propertyType) != null)
- {
- propertyType = Nullable.GetUnderlyingType(propertyType);
- }
- if (propertyType.IsEnum)
- {
- addProperty(prop.Name,((int)simplevalue).ToString());
- }
- else if (propertyType.IsArray && propertyType != typeof(string))
- {
- foreach (var val in prop.GetValue(additionalParams,null) as IEnumerable)
- addProperty(prop.Name,val.ToString());
- }
- else
- {
- if (!string.IsNullOrEmpty(simplevalue.ToString()))
- addProperty(prop.Name,simplevalue.ToString());
- }
- }
- }
- return sb.ToString();
- }
此函数将构建路径的完整路径,并将additionalParams对象中的值作为查询字符串数据附加.这可以通过执行其ToString方法来处理数组,枚举,可空值和其他类型.
希望这可以帮助!