I have a working Ajax.RouteLink, I want to add a fragment. I can't figure out correct syntax.
Working route without fragment:
return Ajax.RouteLink(
linkText,
routeName,
new { caseNo = caseNo, controller = controllerName, option = contentOption },
new AjaxOptions() { UpdateTargetId = "caseContent", HttpMethod = "Post", OnBegin = onBegin, OnSuccess = onSuccess },
new { Class = cssClass + (contentOption != null && contentOption == contentView ? " active" : "") });
Compiler Error RouteLink with fragment:
return Ajax.RouteLink(
linkText: linkText,
routeName: routeName,
protocol: null,
hostName: null,
fragment: fragment,
routeValues: new { caseNo = caseNo, controller = controllerName, option = contentOption },
ajaxOptions: new AjaxOptions() { UpdateTargetId = "caseContent", HttpMethod = "Post", OnBegin = onBegin, OnSuccess = onSuccess },
htmlAttributes: new { Class = cssClass + (contentOption != null && contentOption == contentView ? " active" : "") }
);
Errors with routeValues and htmlAttributes. Cannot convert from anonymous type.
I tried:
routeValues: new System.Web.Routing.RouteValueDictionary() { caseNo = caseNo, controller = controllerName, option = contentOption }
but then the complier complains about my routing parms (caseNo, controller, option).
Also, is it okay to leave protocol and hostname null, as I'm not changing those?
The only problem I see is your use of Class
in htmlAttributes for both calls of Ajax.RouteLink
you posted. You can't use Class
, as it's a reserved word. The workaround is to prefix an @
, i.e. @class
.
Sorry, you're right about that. I got tricked, I think, by the syntax highlighting. Anyways, after taking another look, I found your problem. I don't use any of the Ajax.*
helpers personally, so I'm not familiar with their signatures. So I took a look at the MSDN documentation on the extension method. Simply there's no overload that allows passing a fragment
and anonymous objects for routeValues
and htmlAttributes
. If you want to use the fragment
version(s) then you must pass RouteValueDictionary
and IDictionary<string, object>
for routeValues
and htmlAttributes
, respectively.
The issue you're having with RouteValueDictionary
is that you need to actually initialize with dictionary members, so { "caseNo", caseNo }
rather than caseNo = caseNo
.