Модальное окно загрузки .NET MVC не отображается

Действие ниже управляет котировками ордеров. И у меня есть оператор if внутри. Если количество продукта в заказе превышает количество товара на складе, я хочу показать сообщение об ошибке с помощью TempData и Bootstrap Modal. Но когда я пытаюсь проверить, работает ли это, хотя TempData не имеет значения null, модальное окно не отображается. И я использую одну и ту же технику для разных областей одного и того же проекта. Но это единственный, который не работает. Сопутствующее действие:

public async Task<IActionResult> ManageOrderQuote(int orderId, string status, string statusDescription)
{
    var order = await orderQuote.GetByIdAsync(orderId);
    var orderDetails = await orderQuoteDetail.GetAllByIdAsync(orderId);
    foreach (var detail in orderDetails)
    {
        var productId = detail.ProductId;
        var productToUpdate = await product.GetByIdAsync(productId);
        productToUpdate.UnitsOnOrder += detail.Quantity;
        productToUpdate.UnitsInStock -= detail.Quantity;
        if (productToUpdate.UnitsInStock < 0)
        {
            TempData["ErrorMessage"] = "The " + productToUpdate.ProductName + " product doesn't have enough stock.";
            return RedirectToAction("PendingOrders");
        }
        await product.UpdateAsync(productToUpdate);
    }
    order.Status = status;
    order.StatusDescription = statusDescription;
    await orderQuote.UpdateAsync(order);

    return RedirectToAction("PendingOrders");
}

JS-код и модальное окно:

@if (TempData["ErrorMessage"] != null)
{
    <script>
        $(document).ready(function () {
            $('#errorModal').modal('show');
        });
    </script>
}

<!-- Error Modal -->
<div class = "modal fade" id = "errorModal" tabindex = "-1" aria-labelledby = "errorModalLabel" aria-hidden = "true">
    <div class = "modal-dialog modal-dialog-centered">
        <div class = "modal-content">
            <div class = "modal-header bg-danger text-light">
                <h5 class = "modal-title" id = "errorModalLabel">Error</h5>
            </div>
            <div class = "modal-body">
                <p class = "text-danger">@TempData["ErrorMessage"]</p>
            </div>
            <div class = "modal-footer">
                <button type = "button" class = "btn btn-danger" data-bs-dismiss = "modal">Close</button>
            </div>
        </div>
    </div>
</div>

Это вызов AJAX:

 $('#statusForm').submit(function (e) {
     e.preventDefault();
     var orderId = $('#orderId').val();
     var status = $('#status').val();
     var statusDescription = $('#statusDescription').val();
     $.ajax({
         url: '/Sales/ManageOrderQuote',
         type: 'POST',
         data: {
             orderId: orderId,
             status: status,
             statusDescription: statusDescription
         },
         success: function (response) {
             $('#statusModal').modal('hide');
             $('.modal-backdrop').remove();
             window.location.reload();
         },
         error: function () {
             alert('An error occurred while changing order status.');
         }
     });
 });

PendingOrders.cs:

public async Task<IActionResult> PendingOrders()
{
    var orders = await orderQuote.GetAllPendingOrders();

    var orderList = new List<OrderVM>();
    foreach (var order in orders)
    {
        var orderVM = new OrderVM()
        {
            OrderQuoteId = order.OrderQuoteId,
            CustomerName = order.Customer?.ContactFirstName + " " + order.Customer?.ContactLastName,
            OrderDate = order.OrderDate,
            Status = order.Status,
            StatusDescription = order.StatusDescription
        };
        orderList.Add(orderVM);
    }
    return View(orderList);
}

«Но этот единственный не работает». Какой у вас код ManageOrderQuote? Я тестирую это так: i.sstatic.net/bEKDd.png

Qing Guo 28.03.2024 02:56

@QingGuo Что вы подразумеваете под «кодом ManageOrderQuote»? У меня нет на это представления. Это просто пост-действие, как я задал в своем вопросе.

seadt13 28.03.2024 07:58

Какое представление вы публикуете для этого действия? Как вы публикуете действие ManageOrderQuote?

Qing Guo 28.03.2024 08:02

@QingGuo Представление, которое я публикую для этого действия, — PendingOrders. Я не публиковал это полностью, чтобы не усложнять ситуацию. И я добавил запрос AJAX в свой пост.

seadt13 28.03.2024 08:12

Находится ли ваш JS-код и мода в представлении PendingOrders? Не могли бы вы поделиться своим кодом действия PendingOrders?

Qing Guo 28.03.2024 08:26

Да, мой JS-код и модальное окно находятся в представлении PendingOrders. Я добавил действие PendingOrders.

seadt13 28.03.2024 08:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы можем попытаться

1. Добавьте <div id = "divToUpdated"></div> на страницу с вызовом AJAX для модального отображения.

2. Затем измените успех ajax, например:

 success: function (response) {
     $('#statusModal').modal('hide');
     $('.modal-backdrop').remove();
     // window.location.reload();
     $("#divToUpdated").html(response);
 },

Примечание. Отобразится модальная страница PendingOrders.

Или с помощью 1,2 мы можем использовать PartialView для отображения модального окна, поместить JS-код и модальное окно в PartialView с именем _modalPartialView, затем мы вызываем PartialView следующим образом:

if (productToUpdate.UnitsInStock < 0)
        {
            TempData["ErrorMessage"] = "The " + productToUpdate.ProductName + " product doesn't have enough stock.";
           return PartialView("_modalPartialView");
        }

результат:

Итак, я попробовал это решение, оно показалось справедливым, но тоже не сработало. Потом я попробовал все это переписать. Это тоже не сработало, но я попробую это исправить. Дам вам знать, если я это сделал. Спасибо за все.

seadt13 28.03.2024 11:12

Я вернул JsonResult в действии, а затем показал модальные окна внутри вызова AJAX. Это сработало.

seadt13 28.03.2024 12:13

Другие вопросы по теме