ASP.Net MVC RouteData and arrays

后端 未结 6 1781
遥遥无期
遥遥无期 2020-12-03 01:35

If I have an Action like this:

public ActionResult DoStuff(List stuff)
{
   ...
   ViewData[\"stuff\"] = stuff;
   ...
   return View();
}
         


        
6条回答
  •  时光说笑
    2020-12-03 01:45

    This will just act as an extension to the UrlHelper and just provide a nice url ready to put anywhere rather than an an entire a tag, also it will preserve most of the other route values for any other specific urls being used... giving you the most friendly specific url you have (minus the IEnumerable values) and then just append the query string values at the end.

    public static string ActionWithList(this UrlHelper helper, string action, object routeData)
    {
    
        RouteValueDictionary rv = new RouteValueDictionary(routeData);
    
        var newRv = new RouteValueDictionary();
        var arrayRv = new RouteValueDictionary();
        foreach (var kvp in rv)
        {
            var nrv = newRv;
            var val = kvp.Value;
            if (val is IEnumerable && !(val is string))
            {
                nrv = arrayRv;
            }
    
            nrv.Add(kvp.Key, val);
    
        }
    
    
        string href = helper.Action(action, newRv);
    
        foreach (var kvp in arrayRv)
        {
            IEnumerable lst = kvp.Value as IEnumerable;
            var key = kvp.Key;
            foreach (var val in lst)
            {
                href = href.AddQueryString(key, val);
            }
    
        }
        return href;
    }
    
    public static string AddQueryString(this string url, string name, object value)
    {
        url = url ?? "";
    
        char join = '?';
        if (url.Contains('?'))
            join = '&';
    
        return string.Concat(url, join, name, "=", HttpUtility.UrlEncode(value.ToString()));
    }   
    

提交回复
热议问题