2011-06-27 8 views
1

私はカスタムエラーがWeb.configファイルで有効に設定します。MVC 3のカスタムエラーページを表示できません!

<customErrors mode="On"/> 

と、のApplication_Startで、これらを置く:

protected void Application_Error(object sender, EventArgs e) { 

    var ex = Server.GetLastError().GetBaseException(); 

    var routeData = new RouteData(); 

    if (ex.GetType() == typeof(HttpException)) { 
     var httpException = (HttpException)ex; 
     var code = httpException.GetHttpCode(); 
     routeData.Values.Add("status", code); 
    } else { 
     routeData.Values.Add("status", -1); 
    } 

    routeData.Values.Add("action", "Index"); 
    routeData.Values.Add("controller", "Error"); 
    routeData.Values.Add("error", ex); 

    IController errorController = new Kavand.Web.Controllers.ErrorController(); 
    errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData)); 
} 

も私はこのようなエラーコントローラを作成:

public class ErrorController : Kavand.Web.Mvc.Kontroller 
{ 
    public ActionResult Index(int status, Exception error) { 
     Response.StatusCode = status; 
     HttpStatusCode statuscode = (HttpStatusCode)status; 
     return View(statuscode); 
    } 
} 

エラーが発生したときは、私のカスタム表示ではなく、黄色のページが表示されました!みんなが私を助けてくれる?

protected void Application_Error(object sender, EventArgs e) 
{ 
    var ex = Server.GetLastError().GetBaseException(); 
    Server.ClearError(); // <-- that's what you are missing 
    var routeData = new RouteData(); 
    ... 
} 

はまた、中RegisterGlobalFilters静的メソッドに追加されHandleErrorAttributeグローバル属性を除去することが重要である: どうもありがとう、それを取得した後、Application_Errorでエラーをクリアすることを忘れないでください

+0

イエローページのエラーは何ですか?ハンドラには多くのロジックがあり、おそらく別の例外が発生する可能性があります。 –

+0

私はこれがあなたの質問だと知っていますが、私にとっては答えです!このコードをお寄せいただきありがとうございます。 :) – Shion

答えて

3

についてGlobal.asaxは必要なくなりました。

following answerが役に立つ場合もあります。

+0

おかげで親愛なるダーリンディミトロフ;あなたの答えは私の問題を解決するので、もう一度ありがとう。 (^_^) –

関連する問題