试图返回json并填充selectlist

Nil*_*ers 8 c# asp.net-mvc jquery

我试图从我的控制器返回一个Json结果,并使用jQuery填充选择列表.但代码甚至没有在我的控制器中击中Json方法.

我的选择清单

<select id="MyList"></select>
Run Code Online (Sandbox Code Playgroud)

我的javascript

<script type="text/javascript">
    $(document).ready(function () {
        $.getJSON("@Url.Action("GetProductJson", "Product")", null, function (data) {
            $("#MyList").addItems(data);
        });
    });

    $.fn.addItems = function (data) {
        return this.each(function () {
            var list = this;
            $.each(data, function (index, itemData) {
                var option = new Option(itemData.Text, itemData.Value);
                list.add(option);
            });
        });
    };
</script>
Run Code Online (Sandbox Code Playgroud)

我在ProductController中的Json方法

[HttpGet]
public JsonResult GetProductJson()
{
    var list = new List<SelectListItem>
           {
               new SelectListItem { Value = "1", Text = "Aron" },
               new SelectListItem { Value = "2", Text = "Bob" },
               new SelectListItem { Value = "3", Text = "Charlie" },
               new SelectListItem { Value = "4", Text = "David" }
           };

    return Json(list);
}
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 6

您应为默认情况下禁用的GET请求启用JSON.这通过将第二个参数传递给Json方法来实现:

return Json(list, JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)

现在继续安装FireBug.如果您在StackOverflow上发布此问题之前已经这样做了,您可以在浏览器中检查AJAX请求,并且可以看到服务器返回500状态代码,当您检查响应时,您将看到确切的错误消息,而不仅仅是那 - 你也会看到一个关于如何修复它的建议.这个建议基本上就是我在答案中发布的内容.因此,您甚至不需要发布您的问题,因为您可以自己解决它.如果没有FireBug或Chrome Developer Tools等工具,我无法想象人们在进行Web开发.这就像试图用自己的双手并没有任何工具来建造房屋.


Rav*_*dag 1

你需要添加JsonRequestBehavior.AllowGet你的 json 方法

来自 Phil haack 的JsonHijacking帖子

默认情况下,ASP.NET MVC 框架不允许您使用 JSON 负载响应 HTTP GET 请求。如果需要发送 JSON 来响应 GET,则需要使用 JsonRequestBehavior.AllowGet 作为 Json 方法的第二个参数来显式允许该行为。但是,恶意用户有可能通过称为 JSON 劫持的过程来访问 JSON 有效负载。您不希望在 GET 请求中使用 JSON 返回敏感信息。