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