jquery getJson not passing any values to controller

I am trying to pass some text from a textbox to a controller to get JSON results like so

function invokeAction() {
        var searchText = $("#SearchTextBox").val();

        // Invoke MVC controller action
        $.getJSON("/Home/Results/" + searchText, bindResults);
    }

If I put an alert here I can see that searchText definately has a value, but when I put a break point on this controller action:

 public ActionResult Results(string search)
    {
        var r = from t in db.Restaurants
                where SqlMethods.Like(t.Name, "%" + search + "%") || SqlMethods.Like(t.Postcode, search + "%") || SqlMethods.Like(t.CuisineType.Type, search + "%")
                orderby t.Name ascending
                orderby t.Rating descending
                orderby t.NumOfViews
                    descending
                select t;

        return Json(r.ToList());
    }

The string passed in is null, yet when I check the http context in the debugger my searchtext is a part of the url.

As this is null the query returns no results.

Am I missing something here?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

I’ve had some problems returning json from services and I wasn’t getting any calls back. it turned out that the json was malformed and I was able to test that and get those errors by handling the error option of the plain ajax call.

$.ajax({
  type: "GET",
  url: "Home/Results/",
  data: { search: searchText },
  dataType: "json",
  error: function(xhr, status, error) {
    // you may need to handle me if the json is invalid
    // this is the ajax object
  },
  success: function(json){
    alert( "Data Returned: " + json);
  }
});

Method 2

You will have to fix your route and replace {id} with {search} in order to get it to bind to the correct parameter – try something like this:

routes.MapRoute("search", "Home/Results/{search}", 
  new { controller = "Home", action = "Results" });

If you don’t want to do that, you can do it like this by specifying the parametername as a standard querystring paramter

$.getJSON("/Home/Results?search=" + searchText,bindresults);

that will fix the binding.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x