asp.net mvc AjaxHelper 获取 JSON 的方法

默认的 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>

 

posted on 2017-01-30 20:14  四芯线  阅读(172)  评论(0编辑  收藏  举报