У меня есть этот код в моем действии
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">×</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





Я бы передал переменную через 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. Настроить модальное окно для загрузки частичного представления на самом деле довольно просто:
Создать частичное представление: _ModalContent.cshtml
<div class = "modal-content">
<div class = "modal-header">
<button type = "button" class = "close" data-dismiss = "modal">×</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>
Измените свою индексную страницу:
<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>
}
Функция контроллера:
public IActionResult buy(string data)
{
.....
{
return PartialView("_ModalContent");
}
}
@Edwardcho, если ответ поможет, отметьте это как ответ.
Прошу прощения, но я думаю, что мне нужно сделать несколько корректировок здесь и там, поскольку он открывает новую пустую страницу с модальным содержимым: / и я хочу, чтобы модальное окно отображалось на той же странице, если покупка отклонена
@Edwardcho, Нет, не открывал бы новую страницу. Попробуйте коды на новой странице,
Спасибо! Я поищу тот, потому что мне не удалось достать Viewbag :)