Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add query string as route value dictionary to ActionLink

I'm trying to create an ActionLink to export data from a grid. The grid is filtered by values from the query string. Here's an example of the url:

http://www.mysite.com/GridPage?Column=Name&Direction=Ascending&searchName=text

Here's the code to add my ActionLink to the page:

@Html.ActionLink("Export to Excel",    // link text
    "Export",                          // action name
    "GridPage",                        // controller name
    Request.QueryString.ToRouteDic(),  // route values
    new { @class = "export"})          // html attributes

When the link is displayed, the url is this:

http://www.mysite.com/GridPage/Export?Count=3&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D

What am I doing wrong?

like image 815
Steven Avatar asked May 29 '11 02:05

Steven


Video Answer


1 Answers

Try this:

I'm not sure this is the cleanest or most correct way but it does work

I didn't use your extension method. You'll have to reintegrate that:

@{ 
    RouteValueDictionary tRVD = new RouteValueDictionary(ViewContext.RouteData.Values);
    foreach (string key in Request.QueryString.Keys ) 
    { 
        tRVD[key]=Request.QueryString[key].ToString();
    }
}

then

@Html.ActionLink("Export to Excel",    // link text
"Export",                          // action name
"GridPage",                      // controller name
tRVD, 
new Dictionary<string, object> { { "class", "export" } }) // html attributes

Results in

Results

with class exportenter image description here

like image 173
Khepri Avatar answered Oct 08 '22 14:10

Khepri