Как создать страницу с сообщением об общей ошибке?
На сайте Asp.Net Mvc 4 могут быть различные ошибки, сообщения об ошибках которых должны быть показаны конечным пользователям (например, "Не удается найти строку с идентификатором xxx.", "Невозможно удалить эту строку, поскольку от нее зависит xxx. ",... так далее).
Как (и каков наилучший подход) определить общую страницу ошибки, принять сообщение об ошибке и отобразить его? Или просто всплывающее диалоговое окно?
4 ответа
Вы можете создать CustomException и бросить, когда ему нужно. В глобальном asax вы должны переопределить Application_Error
protected void Application_Error(object sender, EventArgs e)
{
Response.Clear();
var httpContext = ((MvcApplication)sender).Context;
var ex = Server.GetLastError();
// check exception and redirect to your custom error page with Title, Description and url for redirect.
}
Создайте ErrorAction в контроллере.
Вы можете поймать ошибку и перенаправить на ErrorAction с сообщением. Покажи как хочешь.
Я надеюсь, вы понимаете мою точку зрения.
Я бы предложил создать частичное представление и простую модель ошибок. Вид будет представлен в макете. Модель ошибки может быть затем перенесена как TempData, так как она удаляется после первого чтения. в представлении, если у вас есть переменная, в TempData - вы показываете элемент с необходимым макетом, в противном случае - вы ничего не показываете. Кроме того, у вас может быть метод расширения для TempData, чтобы добавить ошибку.
Это то, что мы делали в одном из проектов, над которыми я работал раньше. У нас был тег div на нашей странице, где мы отображали все сообщения об успехах и неудачах. Это будет работать следующим образом:
- Мы бы получили сообщение от контроллера для просмотра через AJAX.
- Затем мы вставим это сообщение в тег div.
- Мы переключаем html-класс этого div на основании условия успеха. Если бы это было успешно, в этом случае мы бы отображали все сообщение зеленым цветом с галочкой, иначе, если это было бы ошибкой, мы отображали бы все сообщение красным цветом с крестиком. Оба класса css были определены в нашем site.css.
Я надеюсь, что ответил на ваш вопрос.