Функция Like работает неправильно

186
14 марта 2019, 19:20

Есть функция Like

public ActionResult LikeMethod(string userId, int postId)
        {
            var userLike = _context.Publications.FirstOrDefault(u => u.Id == postId);
            if (ModelState.IsValid)
            {
                if (userLike != null)
                {
                    userLike.Like = userLike.Like + 1;
                    _context.Update(userLike);
                    _context.SaveChangesAsync();
                    return RedirectToAction(nameof(Index));
                }
            }
            return View();
        }

так же есть js скрипт

<script>
    function sendLike(userId, postId) {
        $.ajax({
            url: '@Url.Action("LikeMethod", "Publications")',
            type: 'POST',
            data: { 'postId': postId, 'userId': userId },
            success: function(data) {
                setTimeout(function() {
                        alert('Вы поставили Like!', data)
                    },
                    500);
            },
            error: function() {
                console.log('Ошибка во время отправки комментария', this);
            }
        });
    }
</script>

Так выглядит Html кнопки.

<div id="postdiv-@Model.Id">
    <form>
        <input id="LikeId" type="button" value="Like" class="btn btn-default" onclick="sendLike('@Model.UserId', '@Model.Id')"
               style="color: aliceblue; background-color: darksalmon;" />
    </form>
</div>

Проблема в следующем:

Когда добавляешь лайк он ставиться не сразу, приходиться обновлять страницу по несколько раз. Так же может и не с первого раза ставить лайк, приходиться по несколько раз ставить и обновлять страницу, что бы заработал. В чём может быть причина?

Answer 1

Вы пытаетесь сохранять асинхронно (_context.SaveChangesAsync();) в синхронном методе, то есть метод возвращает управление ещё до того, как сохранение в БД произошло. Либо сохраняйте синхронно

_context.SaveChanges();

Либо асинхронно

    public async Task<ActionResult> LikeMethod(string userId, int postId) // изменение здесь
    {
        var userLike = _context.Publications.FirstOrDefault(u => u.Id == postId);
        if (ModelState.IsValid)
        {
            if (userLike != null)
            {
                userLike.Like = userLike.Like + 1;
                _context.Update(userLike);
                await _context.SaveChangesAsync(); // и здесь
                return RedirectToAction(nameof(Index));
            }
        }
        return View();
    }
READ ALSO
C# Entity Framework many-to-many relations

C# Entity Framework many-to-many relations

У меня есть класс Student, который содержит информацию о студентах, а так же клас Group, который содержит описания факультетаОдин студент может...

165
Как сгенерировать Biginteger заданного размера?

Как сгенерировать Biginteger заданного размера?

Как можно сгенерировать число Biginteger заданного размера?

157
Ошибка Call to undefined method SQLite3Result::fetch_array()

Ошибка Call to undefined method SQLite3Result::fetch_array()

Как правильно использовать fetch_array?

172
Не работают cookie (PHP)

Не работают cookie (PHP)

Вот это код:

157