오류 페이지로 리디렉션하지 않고 동일한보기에서 표시하는 대신 던진 예외를 표시하는 일반적인 방법을 검색합니다. 나는 이것을 아래에서 시도했다 :동일한보기에서 예외를 표시하는 방법은 무엇입니까?
1) 나는 global.asax에서 사용자 정의 필터를 추가하고 public override void OnException(ExceptionContext filterContext)
을 내 Attribute 클래스에서 덮어 씌우는 것으로 먼저 처리하려고 시도했지만 그런 식으로 나는 filterContext.Result를 채울 수 없었다. 보기의 이전 모델에 연결할 수 없기 때문에 오류 페이지로 리디렉션 할 수는 있지만 원하는 것은 아닙니다.
2) 그런 다음 내 BaseController
에서 예외를 잡으려고했습니다 (모든 컨트롤러가 그걸 상속받습니다). 다시 내 컨트롤러에서 public override void OnException(ExceptionContext filterContext)
을 덮어 쓰고 예외 정보 등을 ViewBag에 넣은 다음 filterContext.HttpContext.Response.Redirect(filterContext.RequestContext.HttpContext.Request.Path);
에 의해 동일한보기로 페이지를 리디렉션했습니다. 그러나 다른 방법을 생각할 수 없도록 ViewBag 내용이 리디렉션 된 페이지에서 손실 되었습니까?
어떻게하면됩니까? 내 BaseController
에 쓴 코드 샘플은 다음과 같습니다 :
protected override void OnException(ExceptionContext filterContext) {
var controllerName = (string)filterContext.RouteData.Values["controller"];
var actionName = (string)filterContext.RouteData.Values["action"];
//filterContext.Result = new ViewResult
//{
// ViewName = actionName,
// ViewData = new ViewDataDictionary<??>(??),
// TempData = filterContext.Controller.TempData,
//};
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
ModelState.AddModelError("Error", filterContext.Exception.Message);
ViewBag.das = "dasd";
filterContext.HttpContext.Response.Redirect(filterContext.RequestContext.HttpContext.Request.Path);
}
이봐, 질문을 다시 포맷을 고려하시기 바랍니다. 그것은 당신이 읽는 것을 돕고 싶어하는 사람들에게 어려운 텍스트의 벽처럼 보입니다. 직접 읽어보십시오. –
그것을 다시 포맷했습니다. 답장을위한 Thx – sotn