Реализация корзины покупок в ядре Razor Pages 3.1 обновление метки количества товаров

#c# #asp.net-core #razor-pages

#c# #asp.net-ядро #razor-страницы

Вопрос:

Я хочу создать анонимную корзину покупок, новый пользователь заходит на сайт, добавляет товар в свою корзину покупок, создается файл cookie, в котором хранится идентификатор пользователя и общее количество товаров. Фактическая корзина хранится в базе данных. Добавление нового элемента вызывает метод на стороне сервера с использованием ajax.

мой вопрос в том, как реализовать метку на панели навигации, чтобы показывать количество товаров по мере изменения количества товаров. при добавлении товаров не выполняется обратная отправка или переход к обзору корзины.

Я думал о том, чтобы просто иметь ссылку и текст корзины покупок в качестве части, которая считывает общее количество из обновленного файла cookie и обновляет его, но я не уверен, можно ли обновить часть с другой страницы.

Как это делают другие люди? Просто обновить метку с помощью Javascript?

Комментарии:

1. Ну. Вы можете либо: 1) использовать websocket , либо 2) создать setInterval и ajax вызвать конечный запрос, чтобы получать товары / количество товаров каждые x секунд. Второй подход может быть проще для вас, но убедитесь, что x секунд — это не малое число, потому что вы не хотите утяжелять приложение. Если вы завершите его и останетесь довольны, вы можете попробовать 1-й подход, поскольку он работает в режиме реального времени.

2. Спасибо, я не сторонник использования временного цикла для обновления значения в _layout . Я не уверен, что websockets — это путь вперед, это всего лишь обновление ярлыка. Должен быть какой-то способ, чтобы обновить часть в _layout, которая будет считывать значение cookie ИЛИ использовать что-то вроде innerhtml?

Ответ №1:

Вы можете легко использовать partialview. Возвращает partialview в качестве вывода при изменении корзины покупок. И создайте partialview в зависимости от вашего вкуса. Я ввожу код в качестве примера

html-код:

 <span id="framebasket">
     @Html.Partial("_Basket")
</span>
 

_Basket частичный:

  <div class="col-level1-14">
      <div class="row-new padding-r-25">
         <span class="color-black style-font-12-sb">@p.ProductName</span>
       </div>
       <div class="row-new padding-r-25">
          <span class="color-black style-font-12-sb">@p.ColorTitle</span>
       </div>
                   
       <div class="row-new padding-r-25">
           <span class="style-font-12-sb color-888">Count: </span>
           <span class="style-font-12-sb color-888">@item.Count</span>
           @if (p.ShowOfferPrice.Value)
            {
                 total = total   (p.OfferPrice * item.Count);
                <span class="float-l style-font-12-sb padding-t-5 color-888">@p.OfferPrice.ToPrice()</span>
            }
            else
            {
              total = total   (p.Price * item.Count);
              <span class="float-l style-font-12-sb padding-t-5 color-888">@p.Price.ToPrice()</span>
            }
      </div>
</div>
 

Требуется скрипт:

 <script>
$('.addtobasket').click(function () {
       showLoad();
       var basket = $(this).attr('basket');
       var inst = $('[data-remodal-id=modalbasket]').remodal();

       $.ajax({
         url: "/Basket/AddToBasket",
         data: { basket: basket },
         type: "Post",
         dataType: "Json",
         success: function (result) {
         $("#framebasket").html(result.HtmlBody);
         //this for aler The information was logged into the system to reassure the user
         inst.open();
         closeshowLoad();
        },
        error: function () {
         closeshowLoad();
       }
     });
   });
</script>
 

пример контроллера :

 [HttpPost]
public ActionResult AddToBasket(string basket)
{
    basket operation ...
    return Json(new JsonData()
    {
       HtmlMsg = "",
       HtmlBody = this.RenderPartialToString("_Basket", lst),
       Success = true,
    });
}
 

Это было просто общее объяснение.

Комментарии:

1. Возможно, мой вопрос не ясен, извините.. У меня есть панель навигации в моем _layout, в которой есть ссылка на страницу корзины. Когда пользователь добавляет что-то в корзину, я использую Ajax для вызова серверной части для добавления товара в базу данных. Я остаюсь на странице добавления в корзину, я не перенаправляю в корзину. Я просто хочу обновить ссылку в макете, чтобы указать корзину (1 товар)

2. Думаю, я мог бы просто обновить метку в успешном вызове Ajax