2013-04-09 6 views
0

Я создаю кнопку «Мне нравится» в простой программе MVC для комментариев. Я передаю идентификатор комментария через ActionResult в HomeController, когда наводил курсор на кнопку «Мне нравится». Проблема (я думаю) заключается в том, что я не знаю, как передать список IEnumerable Likes для ajax.Передача IEnumerable через Json

Сценарий и 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); 
    } 

LikesRepository

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 
    } 
} 
+0

Все остальное выглядит прекрасно для возврата IEnumerable. Вы должны использовать JS-отладчик для просмотра свойства данных в своей функции успеха ajax, и он даст вам представление о том, как обрабатывать данные при возврате (при условии, что ваши данные не пусты). Мне нравится использовать хром и установить точку останова в моей функции успеха, а затем навести курсор на объект данных. – Zach

ответ

0

После того, как мы погрузились в проблему больше, мы обнаружили, что это фактически вызвало ошибку внутреннего сервера (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

Альтернативное решение вернуть данные в виде списка строк, как они только необходимы имена.

+0

Переходя в data.Name в каждом из них, вы пытаетесь передать свойство Name объекта js Array. Вы уже должны быть массивом данных. – Zach

+0

Проблема в том, что она никогда не превращает ее в функцию успеха. Он переходит в ShowLike и создает новый Enumerable, и когда он обращается к возврату, он идет прямо на ошибку, поэтому он идет к успеху. – Mappan

+0

О, я вижу ... вы пытаетесь передать массив FROM js на сервер, правильно? – Zach

Смежные вопросы