我试图从我的控制器返回一个Json结果并使用jQuery填充选择列表。 但代码甚至没有在我的控制器中点击Json方法。
我的选择列表
<select id="MyList"></select>
我的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>
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);
}
答案 0 :(得分:6)
您应该为默认情况下禁用的GET请求启用JSON。这是通过将第二个参数传递给Json
方法来实现的:
return Json(list, JsonRequestBehavior.AllowGet);
现在继续安装FireBug
。如果您在StackOverflow上发布此问题之前已经这样做了,您可以在浏览器中检查AJAX请求,并且可以看到服务器返回500状态代码,当您检查响应时,您将看到确切的错误消息,而不仅仅是那 - 你也会看到一个关于如何修复它的建议。这个建议基本上就是我在答案中发布的内容。因此,您甚至不需要发布您的问题,因为您可以自己解决它。如果没有FireBug或Chrome Developer Tools等工具,我无法想象人们在进行Web开发。这就像试图用自己的双手并没有任何工具来建造房屋。
答案 1 :(得分:1)
您需要在json方法中添加JsonRequestBehavior.AllowGet
来自Phil haack post JsonHijacking
默认情况下,ASP.NET MVC框架不允许您响应 带有JSON有效负载的HTTP GET请求。如果你需要发送JSON 响应GET,您需要明确允许行为 使用JsonRequestBehavior.AllowGet作为Json的第二个参数 方法。但是,恶意用户有可能获得访问权限 JSON有效负载通过称为JSON Hijacking的进程。你不 想要在GET请求中使用JSON返回敏感信息。