#ajax #asp.net-core #model-view-controller #.net-5
#ajax #asp.net-ядро #модель-представление-контроллер #.net-5
Вопрос:
Я только начал работать с ASP.NET Ядро MVC и веб-разработки в целом, и я изо всех сил пытаюсь понять, как показать страницу с ошибкой из вызова AJAX.
Что я хотел бы сделать, так это показать пользовательскую страницу с сообщением об ошибке, если вызов Ajax завершается неудачно. Пока у меня есть следующий код, который приводит меня к моей странице 500, когда я создаю исключение в контроллере, но как мне заставить его отображать сообщение об исключениях на этой странице?
StartUp.cs
промежуточное программное обеспечение:
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseStatusCodePagesWithReExecute("/Error/Error", "?Code={0}");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
Контроллер ошибок:
public IActionResult Error(int? Code = null)
{
if (Code.HasValue)
{
if (Code.Value == 404 || Code.Value == 500)
{
var viewName = Code.ToString();
return View(viewName);
}
}
return View();
}
Вызов AJAX:
// Use ajax call to post to the controller with the data
$.ajax({
type: "POST",
url: "/Renewals/GenerateQuotes",
data: { selectedContractIds: ids },
success: function (response) {
// Show success and refresh the page
Toast.fire({
icon: 'success',
title: 'Quotes Generated'
}).then(function () {
location.reload();
});
},
error: function (xhr, status, error) {
// Response message
var response = xhr.responseText;
window.location.href = '@Url.Action("Error", "Error")?Code=' xhr.status;
}
})
Комментарии:
1. обычно мы показываем ошибку для ajax-запроса в небольшой части страницы, например: <div> …, или через всплывающую подсказку в каком-то углу экрана… Зачем вам целая страница ошибок? Если вы хотите, чтобы в текущую страницу была встроена некоторая предопределенная пользовательская страница ошибок в формате rich HTML, вы можете вернуть этот частичный HTML-код в качестве ответа на запрос ajax, чтобы его можно было отобразить. Этот ответ можно получить через
xhr.responseText
.2. Спасибо, я просто подумал, что было бы полезно увидеть ошибку для внутреннего приложения. Я рассмотрю этот вариант.