У меня есть один контроллер Действие, которое имеет совсем другой вид, чем остальная часть моего приложения, и я хочу, чтобы все исключения, созданные этим действием, отображали другую страницу ошибок, чем остальная часть моего приложения ,ASP.Net MVC4 HandleError, не отображаемый вид рендеринга
Я изменил атрибут HandleError, но он НЕ загружает страницу с ошибкой вообще, когда возникает исключение.
[HttpPost]
[HandleError(View = "UPI_Error")]
public ActionResult ParticipantUpdate1(Participant part)
{
try
{
mps.ParticipantUpdate(LogonTicket, ParticipantID, part);
}
catch(Exception ex)
{
string x = ex.Message;
}
return View();
}
Любые идеи?
UPDATE
OK, изменения к этому:
[HttpPost]
[HandleError(View = "UPI_Error", ExceptionType = typeof(ArgumentException))]
public ActionResult ParticipantUpdateSuccess(Participant part)
{
// Copy the new stuff into the original ParticipantInfo before updating essentially "merging"
Participant OrigPart = CopyParticipant(part);
try
{
string result = mps.ParticipantUpdate(LogonTicket, ParticipantID, OrigPart);
if (result != "Update Success")
{
throw new ArgumentException(result);
}
}
catch (Exception e)
{
throw new ArgumentException(e.Message);
}
return View();
}
Но, это все еще не загружает страницу UPI_Error. Вызов ParticipantUpdate бросает это исключение:
System.ServiceModel.FaultException`1 was unhandled by user code
HResult=-2146233087
Message=ORA-12899: value too large for column "CLI"."CLI_MAIN_ZIP" (actual: 21, maximum: 11)
В статье по этой ссылке: http://www.c-sharpcorner.com/UploadFile/ff2f08/exception-or-error-handling-in-Asp-Net-mvc-using-handleerror/
Он говорит, что HandleError
не в состоянии поймать исключение поднятого за пределами контроллеров. Поскольку исключение происходит в моей веб-службе и распространяется на мое приложение, может ли это быть частью проблемы?
Но я бросаю новое исключение, когда я улавливаю одно из веб-службы, и он по-прежнему показывает YSOD по сравнению с моей страницей пользовательских ошибок.
UPDATE
ОК, я решил пойти другим путем. Я улавливаю исключение, копирую объект исключения в TempData, а затем вызываю свое пользовательское представление. Однако по какой-то причине я не могу изменить макет в представлении. Это происходит с исключением из NULL-ссылки. Есть еще идеи?
[HttpPost]
[HandleError(View = "UPI_Error")]
public ActionResult ParticipantUpdateSuccess(Participant part)
{
bool error = false;
// Copy the new stuff into the original ParticipantInfo before updating essentially "merging"
Participant OrigPart = CopyParticipant(part);
try
{
string result = mps.ParticipantUpdate(LogonTicket, ParticipantID, OrigPart);
if (result != "Update Success")
{
throw new ArgumentException(result);
}
}
catch (Exception ex)
{
error = true; // throw new ArgumentException(e.Message);
TempData["exception"] = ex;
}
if (!error)
{
return View();
}
else
{
return RedirectToAction("UPIError");
}
}
public ActionResult UPIError()
{
ViewBag.Exception = TempData["exception"];
return View();
}
Исключение брошено:
Сообщение ссылка = объект не указывает на экземпляр объекта. StackTrace: в ASP._Page_Views_Home_UPIError_cshtml.Execute() в ... \ Views \ Home \ UPIError.cshtml: линия 4
Вот строка 4, на мой взгляд (да, вид существует в общей папке):
Layout = "~/Views/Shared/_UPILayout.cshtml";
Если у вас возникли проблемы с именованием, но это получилось. Теперь я все еще получаю исключение Null Reference, но вид там и правильно указан.
Пробовал оба с таким же результатом – MB34