I'm having difficulty getting the Model Binder to work. I thought it was the jQuery, so I asked this question, but after further investigation, I can see that the jQuery is indeed sending the parameter to the server. That's the reason I'm asking a new question - this is no longer a jQuery issue, as I originally thought.
Background:
What I'm doing is sending a GET request to my Action Method as follows:
$.get($(this).attr("href"), { "searchExpression": "schroders" }, function (result) {
// do stuff
}, "html");
this creates the following URL:
http://localhost:65091/search/Tabs?searchExpression=schroders
I thought this would have worked, and populated the Action Method:
public PartialViewResult Tabs(string searchExpression)
{
return PartialView(new SearchViewModel
{
PagedFunds = _fundService.GetFunds(searchExpression)
});
}
but the route to this method is defined as:
routes.MapRoute(
null,
"search/{action}/{searchExpression}",
new { controller = "search", action = "QuickSearch", searchExpression = "" }
);
As we can see, searchExpression is expected as a URL parameter, not a query string parameter. I didn't think this would be an issue, but if I overload Tabs
as follows:
public PartialViewResult Tabs(string searchExpression, string query)
{
return PartialView(new SearchViewModel
{
PagedFunds = _fundService.GetFunds(searchExpression)
});
}
and change
{ "searchExpression": "schroders" }
to
{ "query": "schroders" }
the query
parameter in the Action Method is populated.
Question:
So my question is what needs to change to get the searchExpression populated? Do I need to modify the jQuery so it appends "schroders" to the URL, so it's like
/search/Tabs/schroders
Ideally I could have the best of both worlds, where the user could type the URL with the search term, and I could also use the $.get in a way that I could pass the search term as a parameter to the $.get function.