这应该是一个小问题,但我被困在这里几个小时。 它一直在控制台中显示500个错误。没有任何警告。似乎Json()似乎不起作用。我试过一个断点,tempAnswers有一个TempAnswerModels列表。
类
public class TempAnswerModel
{
public int QuestionId { get; set; }
public int Value { get; set; }
public int Id { get; set; }
}
我的ajax代码,
var sendData = { 'Id': @ViewBag.Id };
$.get('@Url.Action("LoadTempAnswers", "Questions")',sendData,function(result) {
alert(result);
},"json");
控制器中的代码,
[HttpGet]
public ActionResult LoadTempAnswers(int? Id)
{
//check if there are temp answers in the table
var tempAnswers = TempAnswerDb.GetAllTempAnswersbyId(id);
return Json(tempAnswers);
}
答案 0 :(得分:1)
您正在进行GET调用,默认情况下,ASP.NET MVC框架不允许您使用JSON有效负载响应HTTP GET请求,以防止JSON Hijacking的攻击。</ p>
通过设置JsonRequestBehavior
(默认为DenyGet
)
[HttpGet]
public ActionResult LoadTempAnswers(int? Id)
{
var tempAnswers = TempAnswerDb.GetAllTempAnswersbyId(id);
return Json(tempAnswers, JsonRequestBehavior.AllowGet);
}
答案 1 :(得分:0)
另一种解决方案是制作动作[HttpPost],然后应用[ValidataAntiForgeryToken]属性。然后,您可以将防伪令牌发布到操作中,并确保它不会被劫持。
JsonRequestBehaviour.AllowGet是一个大锤的方法,正如@stephenmuecke强调的那样,是为了防止JSON劫持攻击。
此外,由于这是一个json请求,您可能希望使控制器操作异步。