Открыть модальный диалог в блоке catch

У меня есть этот код в моем действии

var singedUser = HttpContext.User.Identity.Name;

        try
        {
            _purchaseService.PurchaseCard(singedUser, cardName);
        }
        catch
        {

        }

И я хочу, чтобы это открывалось ТОЛЬКО в том случае, если код входит в блок catch

<div id = "Modal" class = "modal fade" role = "dialog">
    <div class = "modal-dialog">

        <div class = "modal-content">
            <div class = "modal-header">
                <button type = "button" class = "close" data-dismiss = "modal">&times;</button>
                <h4 class = "modal-title">Purchasing Card</h4>
            </div>
            <div class = "modal-body">
                <p>You have unsufficient funds!</p>
            </div>
            <div class = "modal-footer">
                <button type = "button" class = "btn btn-default" data-dismiss = "modal">Cancel</button>
            </div>
        </div>

    </div>
</div>

А вот и моя кнопка

<a class = "button btn btn-success" 
    asp-controller = "Store" asp-action = "Buy" 
    asp-route-data  = "@card.Name">Buy (@card.Price coins)</a>

Я был бы признателен, если бы кто-нибудь сказал мне, как я могу открыть это диалоговое окно на той же странице, только если код входит в блок catch

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
88
2

Ответы 2

Я бы передал переменную через ViewBag на контроллере / действии. Примерно так в контроллере:

            var singedUser = HttpContext.User.Identity.Name;

        try
        {
            _purchaseService.PurchaseCard(singedUser, cardName);
        }
        catch
        {
            ViewBag.ShowModal = false;
        }

Затем переключите, следует ли запускать JQuery для отображения модального окна в разделе сценариев представления:

@section Scripts{
<script>
    @if (ViewBag.ShowModal == true){
        @Html.Raw("$('#Modal').modal('show');");
    }
</script>
}

Вы также можете использовать вызов ajax, чтобы вернуть частичное представление и добавить его в DOM. Настроить модальное окно для загрузки частичного представления на самом деле довольно просто:

  1. Создать частичное представление: _ModalContent.cshtml

    <div class = "modal-content">
        <div class = "modal-header">
            <button type = "button" class = "close" data-dismiss = "modal">&times;</button>
            <h4 class = "modal-title">Purchasing Card</h4>
        </div>
        <div class = "modal-body">
            <p>You have unsufficient funds!</p>
        </div>
        <div class = "modal-footer">
            <button type = "button" class = "btn btn-default" data-dismiss = "modal">Cancel</button>
        </div>
    </div>
    
  2. Измените свою индексную страницу:

    <a id = "button1" class = "button btn btn-success" 
    asp-controller = "Store" asp-action = "Buy" 
    asp-route-data  = "@card.Name">Buy (@card.Price coins)</a>
    
    <div id = "myModal"></div>
    
    @section Scripts{
    
    <script type = "text/javascript">
    $(function () {
        $.ajaxSetup({ cache: false });
        $("#button1").on("click", function (e) {
            $('#myModal').load(this.href, function () {
                $('#Modal').modal({
                    keyboard: true
                }, 'show');
            });
            return false;
        });
    });
    </script>
    }
    
  3. Функция контроллера:

    public IActionResult buy(string data)
    {
        .....
        {
    
            return PartialView("_ModalContent");
        }
    }
    

Спасибо! Я поищу тот, потому что мне не удалось достать Viewbag :)

Edwardcho 14.11.2018 17:25

@Edwardcho, если ответ поможет, отметьте это как ответ.

Nan Yu 19.11.2018 04:15

Прошу прощения, но я думаю, что мне нужно сделать несколько корректировок здесь и там, поскольку он открывает новую пустую страницу с модальным содержимым: / и я хочу, чтобы модальное окно отображалось на той же странице, если покупка отклонена

Edwardcho 19.11.2018 18:33

@Edwardcho, Нет, не открывал бы новую страницу. Попробуйте коды на новой странице,

Nan Yu 20.11.2018 02:28

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