默认的 AjaxHelper 没有提供获取 JSON 的方法,只提供获取 html 然后更新指定元素的方法,不过,经测试发现还是有办法的,由于 AjaxOptions 对象的 OnSuccess 属性指定的 Javascript 回调函数可以带有一个参数,这个参数就是 Ajax 获取的文本内容,只要 Action 返回 Content-type 为 "text/html" 的文本内容就能被此函数获取到。所以,只要将返回 JSON 时的 Content-type 改为 "text/html" (默认值为"application/json"),就可以获取到 JSON 字符串,再将此字符串转换为 JS对象就可以了。(可以使用 jQuery 的 $.parseJSON(jsonString) 函数进行解析)
例:
Home控制器
namespace AjaxTest.Controllers { public class HomeController : Controller { // GET: Home public ActionResult Index() { return View(); } public ActionResult JsonTest() { //注意:将 Content-type 设置为 "text/html" (默认值为:"application/json") return Json(new { ID = 0, Name = "Json测试" }, "text/html", JsonRequestBehavior.AllowGet); } } }
Home/Index(注意其中的 AjaxOptions 对象,只需要设置 HttpMethod 和 OnSuccess 属性就可以了)
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <ul> <li> @Ajax.ActionLink("获取Json", "JsonTest", "Home", null, new AjaxOptions() { HttpMethod = "GET", OnSuccess = "jsonTest" }, new { }) </li> </ul> <script src="~/Scripts/jquery-3.1.1.min.js"></script> <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> <script> function jsonTest(text) { alert(text); } </script> </body> </html>