Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how may i add integer list to route

I'm trying to add int[] array to my Url.Action something like this:

var routeData = new RouteValueDictionary();

for (int i = 0; i < Model.GroupsId.Length; i++) {
    routeData.Add("GroupsId[" + i + "]", Model.GroupsId[i]);
}

in my view:

Url.Action("Index", routeData)

but in html I'm getting:

GroupsId%5B0%5D=1213&GroupsId%5B0%5D=1214

and not:

GroupsId=1213&GroupsId=1214

I need it because I have a checkbox list, and when I do post I'm binding groupIds to int[] and then pass to view where I have export button with Url.Action that doesn't work correctly for me.

like image 442
Sasha Avatar asked Jun 18 '11 10:06

Sasha


1 Answers

You cannot generate such url using the standard helpers because of the duplicate query string parameter names. It's unfortunate but it is how things are.

Here's what you can instead in order to generate such url:

var baseUrl = Url.Action("Index", "SomeController", null, Request.Url.Scheme);
var uriBuilder = new UriBuilder(baseUrl);
uriBuilder.Query = string.Join("&", Model.GroupsId.Select(x => "groupsid=" + x));
string url = uriBuilder.ToString();
like image 196
Darin Dimitrov Avatar answered Nov 15 '22 11:11

Darin Dimitrov