微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将int数组传递给RouteValueDictionary

如何解决如何将int数组传递给RouteValueDictionary

| 我需要生成以下网址:
http://localhost:3178/Reports/?GroupId=1211&GroupId=1237
我正在努力:
var routeData = new RouteValueDictionary();
routeData.Add(\"GroupId\",\"1,2\");
得到:
GroupId=1,%202
要么
routeData.Add(\"GroupId\",\"1\");
routeData.Add(\"GroupId\",\"2\");
得到:具有相同键的项目已添加 乃至
routeData.Add(\"GroupId[0]\",\"1\");
routeData.Add(\"GroupId[1]\",\"2\");
得到:
?GroupId%5B0%5D=1&GroupId%5B1%5D=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方法来处理数组,枚举,可为空的值以及其他类型。 希望这可以帮助!     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。