ASP.NET MVC Passing Lists to RouteData QueryString

前端 未结 1 2009
小鲜肉
小鲜肉 2021-02-06 19:17

The recommended approach for passing lists of values as a QueryString is

www.site.com/search?value=1&value=2&value=3&value=4

ASP.N

相关标签:
1条回答
  • 2021-02-06 19:30

    I've come up with a solution to this myself by making a new class RouteDataList()

    public class RouteDataList<T> : List<T>
    {
        public RouteDataList(IEnumerable<T> enumerable) : base(enumerable) { }
    
        public RouteDataList() : base() { }
    
        public override string ToString()
        {            
            string output = "";
            for (int i = 0; i < this.Count; i++)
            {
                output += i < this.Count - 1 ? this[i] + "-" : this[i].ToString();
            }
    
            return output;
        }
    
        public static List<Int32> ParseInts(string input)
        {
            if (String.IsNullOrEmpty(input)) return null;
    
            List<Int32> parsedList = new List<int>();
            string[] split = input.Split('-');
            foreach (string s in split)
            {
                int value;
                if(Int32.TryParse(s, out value)) parsedList.Add(value);
            }
            return parsedList;
        }
    }
    

    Use as follows:

    RouteDataList<Int32> valuelist = new RouteDataList<Int32>(){5,6,7,8};
    RouteDataList<Int32> anothervaluelist = new RouteDataList<Int32>(){12,13,14,15};
    

    Then Pass to any function that takes a RouteValueDictionary/Anonymous Type:

    return RedirectToAction("View", "Browse", new {valuelist, anothervaluelist } );
    // Produces http://www.site.com/browse/view?valuelist=5-6-7-8&anothervaluelist=12-13-14-15
    
    // To Parse back to a list:
    List<Int32> values = RouteDataList<Int32>.ParseInts(HttpContext.Current.Request.QueryString["valuelist"]) 
    
    0 讨论(0)
提交回复
热议问题