Passing an array of values in Url.Action I need to pass an array of values in Url.Action.

Currently I'm doing:

var redirectUrl = Url.Action("search", new {   
        q = criteria.Q,
        advanced = criteria.Advanced,
        salaryfrom = criteria.SalaryFrom,
        salaryto = criteria.SalaryTo,
    });

if (criteria.JobTypes != null)
    redirectUrl += criteria.JobTypes.Aggregate(string.Empty, (a, x) =&gt; a += "&amp;jobTypes=" + x);


To give me something like:

/search?q=developer&amp;advanced=false&amp;salaryfrom=20000&amp;salaryto=80000&amp;jobTypes=Full%20Time&amp;jobTypes=Contract


Is there a nicer/cleaner approach?
I assume you "own" the controller?
If so, I'd serialize and deserialize the list as a comma separated string on each side.
It'd also be nice if criteria.JobTypes is an empty list instead of a possible null, then you don't need the ?? below.

var redirectUrl = Url.Action("search", new {
    // ...
    jobTypes = String.Join(criteria.JobTypes ?? new string[0], ",")
}


And do jobTypes.split(",") in the action.

URL would look a bit nicer too:

/search?q=developer&amp;advanced=false&amp;salaryfrom=20000&amp;salaryto=80000&amp;jobTypes=Full%20Time,Contract