【问题标题】:Returning JSON data to view page in ASP.NET MVC返回 JSON 数据以在 ASP.NET MVC 中查看页面
【发布时间】:2011-03-21 04:02:30
【问题描述】:

我正在开发 MVC 项目,我在视图页面中使用 jQuery 从控制器获取数据。

public JsonResult CheckUpdate()
{
  dt = dt.AddSeconds(-100);

  IQueryable<Tweet> _tweet = ttr.CheckTime(dt);

  return Json(_tweet, JsonRequestBehavior.AllowGet);
}

这是我的控制器中的一个方法,它从存储库类中获取数据并将其作为 JSON 返回到我的视图页面,该页面使用 jQuery 来获取它。

当我在 Firebug 中运行程序并检查时,它显示了一个错误:

序列化“TweetTrafficReport.Models.User”类型的对象时检测到循环引用

我的问题是

  • 我返回 IQueryable 类型的 JSON 数据是否正确
  • 如何在我的视图页面中使用 JSON 数据而不出现上述错误

感谢您的帮助:)

【问题讨论】:

    标签: jquery asp.net-mvc json asp.net-mvc-2


    【解决方案1】:

    我打赌循环引用是因为你在ReplyTo中有你的Tweet对象引用

    IQueryable 真的没有像 hanselman 那样将每个 Tweet 转换为 JsonCapableTweet 那样大的问题 http://nerddinnerbook.s3.amazonaws.com/Part11.htm

    不过,Twitter 的做法确实有助于 lolok

    http://search.twitter.com/search.json?callback=foo&q=twitter

    他们返回的 json 非常好,将你的与他们的相匹配是一个好习惯

    【讨论】:

    • 您是否认为循环引用问题来自我的数据库中的什么冲突,因为我尝试更改属于您给定的 NerdDinner 并且它仍然是循环引用问题
    • 我的数据库中有我的错误谢谢您的帮助
    【解决方案2】:

    您不应该真正将 IQueryable 作为 Json 返回,而是尝试返回 ViewModel

    public JsonResult CheckUpdate()
    {
    
       dt= dt.AddSeconds(-100);
    
       IQueryable<Tweet> _tweet = ttr.CheckTime(dt);
    
       var tweetVm = _tweet.Select(t => new TweetViewMode(){ Message = t.Message });
    
       return Json(tweetVm, JsonRequestBehavior.AllowGet);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多