Реализация AJAX не работает должным образом для кнопки «Мне нравится» ASP.NET Core 2.1C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Реализация AJAX не работает должным образом для кнопки «Мне нравится» ASP.NET Core 2.1

Сообщение Anonymous »

Я хочу реализовать кнопку «Мне нравится» (только нравится, а не не нравится) в моем проекте, написанном на версии ASP.NET Core 2.1. Это сайт объявлений со скидками, и мы хотим, чтобы посетители могли ставить лайки постам, которые им нужны. Поскольку у меня нет проблем с пространством имен, я предоставлю метод действия в контроллере только из серверной части, а именно:

Код: Выделить всё

 [HttpPost]
public async Task AddLike(int Id)
{
AdminPostModel postModel = new AdminPostModel();
postModel.Post = await _offerDbContext.Posts.SingleOrDefaultAsync(x => x.Id == Id);
var UserIP = _accessor.HttpContext?.Connection?.RemoteIpAddress?.ToString();
var Myagent = Request.Headers["User-Agent"].ToString().Substring(0, 40);
string MyVisit = UserIP + " " + Myagent;
postModel.Visitinfos = await _offerDbContext.Visitinfos.ToListAsync();
Visitinfo visitinfo = new Visitinfo();
visitinfo.PostNumber = Id;
visitinfo.Deviceinfo = MyVisit;
if(postModel.Visitinfos.Any(x => x.PostNumber == visitinfo.PostNumber && x.Deviceinfo == visitinfo.Deviceinfo))
{
ViewBag.Message = "Eyni elanı bir dəfədən çox bəyənə bilməzsiniz";
return Json(postModel.Post.LikeCount);
}
else
{
_offerDbContext.Visitinfos.Add(visitinfo);
postModel.Post.LikeCount++;
await _offerDbContext.SaveChangesAsync();
return Json(postModel.Post.LikeCount);
}
}
Пожалуйста, не путайте себя с IP-адресом пользователя или данными пользовательского агента, которые не имеют отношения к моей проблеме. Я вернул JSON с результатом количества лайков (LikeCount), который является свойством модели Post, и получил к нему доступ через модель представления в этом действии.
Вот части сообщений cshtml-представления:

Код: Выделить всё

  @foreach (Post item in Model)
{




@item.Title

@if (item.URL != null)
{
[url=@item.URL] 
[img]~/images/@item.Image[/img]
[/url]
}
else
{
[url=@item.URL]ƏTRAFLI[/url]

Tarix: @item.CreatedDate.ToString("dd/MM/yyyy")
@if (item.ExpirationDate.ToString("dd/MM/yyyy") == "01.01.2021" || item.ExpirationDate.ToString("dd/MM/yyyy") == "01/01/2019")
{
Bitme tarix: Naməlum
}
else
{
Bitme tarix: @item.ExpirationDate.ToString("dd/MM/yyyy")
}
**Like
**



Как видите, в теге кнопки я вызвал функцию увеличенияLike() для идентификатора публикации, которая используется в части Javascript, как показано ниже:

Код: Выделить всё

@section Script{

function IncreaseLike(id) {
$.ajax({
url: "/Home/AddLike",
type: "POST",
data: { id: id },
}).done(function (result) {
$(".like").append(result);
}
)
};


}
Цель использования AJAX — прервать загрузку страницы после нажатия кнопки «Мне нравится». Но при запуске приложения после нажатия кнопки «Мне нравится» оно добавляет новую 1 рядом с предыдущей 1 вместо обновления рисунка на своем месте. И он применяет его ко всем сообщениям на странице, а не только к конкретному, на который нажали. Возможно, это потому, что я добавляю его в класс (.like), но я не хочу определять разные идентификаторы для каждого сообщения на странице. Как я могу реализовать ajax, чтобы он добавлялся только к выбранному сообщению и только один раз? увеличивая подобное число, а не размещать новое рядом с числом? С базой данных проблем нет, поскольку она работает без использования ajax и вспомогательных тегов asp-action и asp-controller, но при этом страница загружается при каждом щелчке мыши. Пожалуйста, внимательно прочитайте мой код и помогите найти проблему, которая, вероятно, связана с частью JS (AJAX).

Подробнее здесь: https://stackoverflow.com/questions/793 ... t-core-2-1
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»