为了满足的我恶趣味,Asp.Net自带的错误页面已经满足不了我的需求了,我需要在发生错误时去显示自定义错误页,比如:
ThinkPHP的那个错误页面真是深得我心,就像这样:

我把放在了Message下的Error页面,嗯……偷过来的:

然后,错误页面理所当然的变成了酱紫:

Message.Error控制器:
/// <summary> /// 显示错误页面 /// </summary> /// <param name="msg">要显示的提示</param> /// <param name="jump">显示错误后跳转到哪里</param> /// <returns></returns> public ActionResult Error(string msg, string jump) { if (ControllerContext.RouteData.Values["ViewData"] != null) ViewData = ControllerContext.RouteData.Values["ViewData"] as ViewDataDictionary; else { ViewData.Add("Message", msg); ViewData.Add("Jump", jump); } return View(); }
Message.Error视图代码:
@{ ViewBag.Title = "Error"; } <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>跳转提示</title> <style type="text/css"> * { padding: 0; margin: 0; } body { background: #fff; font-family: '微软雅黑'; color: #333; font-size: 16px; } .system-message { padding: 24px 48px; } .system-message h1 { font-size: 100px; font-weight: normal; line-height: 120px; margin-bottom: 12px; } .system-message .jump { padding-top: 10px; } .system-message .jump a { color: #333; } .system-message .success, .system-message .error { line-height: 1.8em; font-size: 36px; } .system-message .detail { font-size: 12px; line-height: 20px; margin-top: 12px; display: none; } </style> </head> <body> <div class="system-message"> <h1>:(</h1> <p class="error">@ViewData["Message"].ToString()</p><p class="detail"></p> <p class="jump"> 页面自动 <a id="href" href="@ViewData["Jump"].ToString()">跳转</a> 等待时间: <b id="wait">3</b> [ <a href="#">寻找帮助</a> ] </p> </div> <script type="text/javascript"> (function () { var wait = document.getElementById('wait'), href = document.getElementById('href').href; var interval = setInterval(function () { var time = --wait.innerHTML; if (time === 0) { location.href = href; clearInterval(interval); }; }, 1000); })(); </script> </body> </html>
嗯。。。Application_Error事件内代码:
protected void Application_Error(object sender, EventArgs e) { var error = Server.GetLastError(); var code = (error is HttpException) ? (error as HttpException).GetHttpCode() : 500; var context = ((HttpApplication)sender).Context; Response.Clear(); Server.ClearError(); if (code == 404) { //404 var routeData = new RouteData(); routeData.Values["controller"] = "Message"; routeData.Values["action"] = "Error"; var viewData = new ViewDataDictionary { { "Message", error.Message }, { "Jump", "/Main/Index" } }; routeData.Values["ViewData"] = viewData; var contextWrapper = new HttpContextWrapper(this.Context); IController errorsController = new MessageController(); var requestContext = new RequestContext(contextWrapper, routeData); errorsController.Execute(requestContext); Response.End(); } }
页面是ThinkPHP的默认错误页