从MVC应用程序返回Json

时间:2011-12-06 13:23:18

标签: asp.net-mvc json jquery

我正在尝试从MVC应用程序返回Json数据。我使用Fiddler和FireBug对此进行故障排除,并且Json数据似乎没问题,但由于某种原因,数据仍然无法显示。这是我的代码:

public class CalendarController : Controller
{

public JsonResult ReturnCalendarEvents()
        {


            var model = _service.EventList("JackV", "10/1/2011", "10/8/2011");
            return Json(model, JsonRequestBehavior.AllowGet);


        }

}

的Site.Master

 $.ajax({
          type: "POST",
          async: false,
          contentType: "application/json; charset=utf-8",
          url: "/Calendar/ReturnCalendarEvents",
          data: "{'UserName':'" + UserName + "','starTime':'" + start.format("isoDateTime") + "','endTime':'" + end.format("isoDateTime") + "'}",
          dataType: "json",
          success: function (result) {
            //Logic goes here
                },
                                error: function (e) { alert("An Error Occured" + e); }
                            });

因此即使在Fiddler中我看到返回的实际Json数据,在Site.Master文件中,这也直接导致错误。返回的错误是[Object object]。没太大帮助。我调试了我的应用程序,在将数据作为Json返回之前没有任何错误。除非数据不是真的Json,但确实看起来像它。

奇怪的是ajax函数运行,然后直接进入错误,然后我进入我的控制器的Visual Studio代码,然后它回到这个ajax函数,但这次它出错了,它去了成功代码。在某个地方,它停止在FireBug中调试,我不知道为什么没有返回数据。

任何人都可以想到任何可能有助于我解决这个问题的事情吗?谢谢。


解决方案:在我看了每个人的评论后,我意识到这一行是错误的:

  var schedules = (eval(result.d));

这是我的成功逻辑的一部分,我没有在帖子中包含。在FireBug结果显示数据,但.d为空。这在Web应用程序中运行得很好,但它不喜欢MVC应用程序中的.d。我将代码更改为此,现在工作正常。我仍然不知道为什么该函数被击中两次,第一个错误输出但第二个检索数据。我会更多地研究它。

 var schedules = (eval(result));

2 个答案:

答案 0 :(得分:1)

我建议使用ajax方法的错误回调属性的所有参数:xhr,textStatus和errorThrown,并检查它们以查看实际错误是什么。请注意,xhr对象具有可以输出的属性(即,它是一个对象,这就是你得到它的原因),但textStatus可能提供更多信息。

 $.ajax({
     ...
     error: function(xhr,textStatus,errorThrown) {
                alert("Error - " + textStatus );
     }
 });

答案 1 :(得分:0)

继tvanfossen所说的话。尝试在http://jsonformatter.curiousconcept.com/中验证你的Json但是,如果它不能序列化为JSON,我希望MVC框架抛出一个错误。