Передача идентификатора элемента в цикле в Jquery - PullRequest
0 голосов
/ 24 января 2019

Я создаю кнопку «Мне нравится» для каждого комментария и публикую данные с помощью jQuery на PostsController.Как я могу передать значение Id @item.Id для каждого элемента в цикле?Как правильно обращаться с этим в коде jQuery?

@foreach (var item in Model.PostComments)
{ 
  <a id="@item.Id" class="btn btn-success"><span class="glyphicon glyphicon-thumbs-up"></span></a>
 }
$(document).ready(function() {
  $("#@item.Id").click(function() {
    var FollowOptions = {};
    FollowOptions.url = "/Posts/CommentUp/";
    FollowOptions.data = { id: "@Model.PostComment.Id" };
    $.ajax(FollowOptions);
  });
});
public IActionResult CommentUp(Guid id)
{
  PostComment PostComment = _context.PostComment.Where(m => m.Id == id).SingleOrDefault();
  if (PostComment == null)
  {
    return NotFound();
  }

  string currentuserid = _userManager.GetUserId(User);
  if (_context.CommentMetric.Where(f => f.PostCommentId == id && f.ApplicationUserId == currentuserid).Count() == 0)
  {
    _context.CommentMetric.Add(new CommentMetric
    {
      Id = Guid.NewGuid(),
      ApplicationUserId = currentuserid,
      PostCommentId = id,
      VoteValue = 1
    });

    return RedirectToAction("Details/" + id);
  }

1 Ответ

0 голосов
/ 24 января 2019

Проблема, с которой вы столкнулись в настоящее время, заключается в том, что ваш код jQuery присваивается только одному id из цикла Model.PostComments - предположительно, последнему. У вас та же проблема при ссылке Model.PostComment.Id.

Было бы более разумно применить общий класс к a элементам, которые вы создаете в цикле, затем прочитать атрибут id и отправить его в запросе, что-то вроде этого:

@foreach (var item in Model.PostComments)
{ 
  <a id="@item.Id" class="btn btn-success btn-like" href="#"><span class="glyphicon glyphicon-thumbs-up"></span></a>
}
$(document).ready(function() {
  $('a.btn-like').click(function(e) {
    e.preventDefault();
    $.ajax({
      url: '@Url.Action("CommentUp", "Posts")',
      data: { id: this.id }
    });
  });
});

Обратите внимание на использование Url.Action() вместо жесткого кодирования URL в примере.

...