尝试使用jQuery ajax和MVC显示JSONResult时出现内部服务器错误#500

时间:2012-07-11 13:58:45

标签: c# asp.net-mvc json jquery asp.net-ajax

控制器

public JsonResult TeamInfo(string teamName)
            {
                teamDA = new TeamDataAccess();
                var teamInfo = teamDA.TeamInfo(teamName);
               System.Web.Script.Serialization.JavaScriptSerializer oSerializer =
             new System.Web.Script.Serialization.JavaScriptSerializer();
                string sJSON = oSerializer.Serialize(teamInfo);
                JsonResult jsonResult 
=new JsonResult(){ JsonRequestBehavior = JsonRequestBehavior.AllowGet }; 
                    jsonResult.Data = sJSON; // first i give this.
         jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
                    return jsonResult;
                }

从jQuery调用Controller

$.ajax({
                url: 'Team/TeamInfo/' + teamName,
                success: function (data) {
                    $('#teamDetails').html(data);
                    alert('Load was performed.');
                    $("#dialog-modal").dialog("open");
                }
            });

调试时我可以看到它一直执行到控制器return jsonResult;的最后一行但是alert('Load was performed.');不可见。 你知道它不成功的原因是什么部分。服务器端没有错误。任何帮助都非常感谢。

修改 当我在ajax调用中添加error时。它说错误500(内部服务器错误)。我如何找到这个问题?

2 个答案:

答案 0 :(得分:3)

您不需要使用JavaScriptSerializer制作所有序列化内容。

您的操作方法可能如下所示:

 public JsonResult TeamInfo(string teamName)
 {
      return Json(new TeamDataAccess()TeamInfo(teamName), JsonRequestBehavior.AllowGet); 
 }

答案 1 :(得分:1)

$.ajax的默认请求类型为GET,但默认情况下JsonResult不允许GET请求,因此您需要使用JsonRequestBehavior属性明确允许它们:

JsonResult jsonResult = 
    new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet };
jsonResult.Data = sJSON;

return jsonResult;

或者您可以使用type: 'POST'

使用ajax调用进行POST

注意:使用行$('#teamDetails').html(data);

将返回的JSON直接放入DOM中的目标仍然不明确