My javascript function is calling my MVC 4 controller, but the parameter is always null. This seems to be a common problem, and I’ve tried a few things I’ve researched, but nothing is working. Any idea why it’s always null?
My javascript GetEntries() function correctly creates an alert that shows the value:
function GetEntries(firstLetter) {
alert(firstLetter);
$.post('/Home/GetEntries',
firstLetter,
EntriesReceived());
}
My controller method breakpoint gets hit:
public void GetEntries(string firstLetter)
{
Debug.WriteLine(firstLetter);
}
However, firstLetter is always null. I’m not sure what to do.
Failed attempts:
I tried posting using JSON.stringify.
function GetEntries(firstLetter) {
alert(firstLetter);
var firstLetterAsJson = JSON.stringify(firstLetter);
$.post('/Home/GetEntries',
{ jsonData: firstLetterAsJson },
EntriesReceived());
}
I tried adding the HttpPost attribute to my controller:
[HttpPost]
public void GetEntries(string firstLetter)
{
Debug.WriteLine(firstLetter);
}
I tried changing the parameter name to “id” to match my route mapping:
[HttpPost]
public void GetEntries(string id)
{
Debug.WriteLine(id);
}
The following should work
Also notice how the
EntriesReceivedcallback is passed to the$.postfunction as third argument. In your code you seem to be calling the function (EntriesReceived()) instead of passing it as callback. Here I assume that this function is defined like this:And if you want to send it as a JSON request you should use the $.ajax method which allows you to specify the proper request content type:
Another problem I see with your controller action is that you defined it as
void. In ASP.NET MVC the common established convention is that all controller actions must return instances of theActionResultclass. But if you don’t want to return anything to the client then use the specific ActionResult for this case – EmptyResult: