Как я могу обработать ошибку asp.net mvc И использовать то же представление с контроллера? - PullRequest
0 голосов
/ 24 ноября 2010

У меня есть такие действия:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult New(Product product)
{
    try
    {
        if(ModelState.IsValid)
        {
            _productService.Create(product);
            TempData["success"] = "Product created successfully!";
            return RedirectToAction("Edit", new { product.Id });
        }
    }
    catch (Exception e)
    {
        Logger.Exception(e);
        TempData["error"] = "Oops, an error occurred! Please try again in a few moments.";
    }

    return View(product);
}

Я хочу убрать логику обработки ошибок из методов. Однако вместо стандартного способа работы [HandleError] вместо перенаправления пользователя в другое представление в случае ошибки он возвращает мне то же представление с TempData ["error"], и уведомление появляется в верх той же страницы.

Как я могу это сделать, удалить весь этот код try {} catch {} и поместить эту логику вне этого действия, а также для других действий?

1 Ответ

0 голосов
/ 23 февраля 2011

Вы должны иметь возможность использовать [HandleError] и OnException, чтобы делать то, что вы хотите. Например, для отображения пользовательского представления:

protected override void OnException(ExceptionContext filterContext)
{
        // Output a nice error page
        if (filterContext.HttpContext.IsCustomErrorEnabled)
        {
                filterContext.ExceptionHandled = true;
                this.View("Error").ExecuteResult(this.ControllerContext);
        }
}

Я опубликовал немного больше информации об этом в своем блоге некоторое время назад:

http://blog.dantup.com/2009/04/aspnet-mvc-handleerror-attribute-custom.html

...