0

次のようなアクションがあります。

[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{} コードをすべて削除し、このロジックをこのアクションの外に置き、他のアクションについても同様にするにはどうすればよいでしょうか?

4

1 に答える 1

0

[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

于 2011-02-23T18:33:18.203 に答える