【问题标题】:Passing IEnumerable through Json通过 Json 传递 IEnumerable
【发布时间】:2013-04-09 16:15:18
【问题描述】:

我正在一个简单的评论数据库 MVC 程序中创建一个“Like”按钮。 当我将鼠标悬停在“Like”按钮上时,我将评论的 ID 传递给 HomeController 中的 ActionResult。问题(我认为)是我不知道如何将喜欢的 IEnumerable 列表传递给 ajax。

脚本和 HTML 部分:

HTML:

<a href="#" class="likes" title="No likes yet." id="@comment.ID">Like this</a>

脚本:

$(".likes").hover(function (event) {

    var Liker = { "CID": event.target.id };

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/Home/ShowLike/",
        data: JSON.stringify(Liker),
        dataType: "json",
        success: function (data) {
            $.each(data.Name, function (value) {
                alert(value);
            });
        },
        error: function (xhr, err) {
            // Note: just for debugging purposes!
            alert("readyState: " + xhr.readyState +
            "\nstatus: " + xhr.status);
            alert("responseText: " + xhr.responseText);
        }
    });

});

HomeController -> ShowLike

    [HttpPost]
    public ActionResult ShowLike(Liker ids)
    {
        LikesRepository lkrep = new LikesRepository();

        IEnumerable<Like> list = lkrep.GetLikes(ids.CID);

        return Json(list);
    }

喜欢存储库

 public class LikesRepository
 {
    CommentDBDataContext m_db = new CommentDBDataContext();

    public IEnumerable<Like> GetLikes(int iden)
    {
        var result = from c in m_db.Likes
                     where c.CID == iden
                     orderby c.Name ascending
                     select c;

        return result;
    }

    public void AddLike(Like c)
    {
        m_db.Likes.InsertOnSubmit(c);
        m_db.SubmitChanges(); //This works
    }
}

【问题讨论】:

  • 返回 IEnumerable 的其他一切看起来都很好。您应该使用 JS 调试器来查看 ajax 成功函数中的 data 属性,它将让您了解如何在返回时处理数据(假设您的数据不为空)。我喜欢使用 chrome 并在我的成功函数中设置断点,然后将鼠标悬停在数据对象上。

标签: asp.net-mvc jquery ienumerable


【解决方案1】:

在深入研究该问题后,我们发现它实际上触发了内部服务器错误 (500)。这是由将 LINQ to SQL 对象序列化为 JSON 的循环引用引起的。这个问题讨论过好几次了...

How to remove circular reference in Entity Framework?

How did I solve the Json serializing circular reference error?

Circular Reference exception with JSON Serialisation with MVC3 and EF4 CTP5w

另一种解决方案是将数据作为字符串列表返回,因为它们只需要名称。

【讨论】:

  • 通过将 data.Name 传入你的 each,你试图传入一个 js Array 对象的 Name 属性。你的数据应该已经是一个数组了。
  • 问题是它永远不会进入成功函数。它进入 ShowLike 并创建一个新的 Enumerable,当它返回时,它直接进入错误,所以它确实进入了 Success。
  • 哦,我明白了...您正在尝试将数组从 js 传递到服务器,对吗?
  • 你能在你的 ShowLike 中设置一个断点,以确保它被命中并填充了 id 吗?
  • 首先我这样做: var Liker = { "CID": event.target.id };我将其发送到 ShowLike 以映射到数据库中的 Like 类。这样可行。然后,我用 CID == 将所有喜欢的内容检索到我发送的内容中。然后用 return Json(list) 将它们返回,并希望在 ajax 中捕获它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
相关资源
最近更新 更多