ASP.NET MVC controller actions that return JSON or partial html
In your action method, return Json(object) to return JSON to your page.
public ActionResult SomeActionMethod() { return Json(new {foo="bar", baz="Blech"});}
Then just call the action method using Ajax. You could use one of the helper methods from the ViewPage such as
<%= Ajax.ActionLink("SomeActionMethod", new AjaxOptions {OnSuccess="somemethod"}) %>
SomeMethod would be a javascript method that then evaluates the Json object returned.
If you want to return a plain string, you can just use the ContentResult:
public ActionResult SomeActionMethod() { return Content("hello world!");}
ContentResult by default returns a text/plain as its contentType.
This is overloadable so you can also do:
return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
I think you should consider the AcceptTypes of the request. I am using it in my current project to return the correct content type as follows.
Your action on the controller can test it as on the request object
if (Request.AcceptTypes.Contains("text/html")) { return View();}else if (Request.AcceptTypes.Contains("application/json")){ return Json( new { id=1, value="new" } );}else if (Request.AcceptTypes.Contains("application/xml") || Request.AcceptTypes.Contains("text/xml")){ //}
You can then implement the aspx of the view to cater for the partial xhtml response case.
Then in jQuery you can fetch it passing the type parameter as json:
$.get(url, null, function(data, textStatus) { console.log('got %o with status %s', data, textStatus); }, "json"); // or xml, html, script, json, jsonp or text
Hope this helpsJames
Another nice way to deal with JSON data is using the JQuery getJSON function. You can call the
public ActionResult SomeActionMethod(int id) { return Json(new {foo="bar", baz="Blech"});}
Method from the jquery getJSON method by simply...
$.getJSON("../SomeActionMethod", { id: someId }, function(data) { alert(data.foo); alert(data.baz); });