How to make custom error pages work in ASP.NET MVC 4 How to make custom error pages work in ASP.NET MVC 4 asp.net asp.net

How to make custom error pages work in ASP.NET MVC 4


My current setup (on MVC3, but I think it still applies) relies on having an ErrorController, so I use:

<system.web>    <customErrors mode="On" defaultRedirect="~/Error">      <error redirect="~/Error/NotFound" statusCode="404" />    </customErrors></system.web>

And the controller contains the following:

public class ErrorController : Controller{    public ViewResult Index()    {        return View("Error");    }    public ViewResult NotFound()    {        Response.StatusCode = 404;  //you may want to set this to 200        return View("NotFound");    }}

And the views just the way you implement them. I tend to add a bit of logic though, to show the stack trace and error information if the application is in debug mode. So Error.cshtml looks something like this:

@model System.Web.Mvc.HandleErrorInfo@{    Layout = "_Layout.cshtml";    ViewBag.Title = "Error";}<div class="list-header clearfix">    <span>Error</span></div><div class="list-sfs-holder">    <div class="alert alert-error">        An unexpected error has occurred. Please contact the system administrator.    </div>    @if (Model != null && HttpContext.Current.IsDebuggingEnabled)    {        <div>            <p>                <b>Exception:</b> @Model.Exception.Message<br />                <b>Controller:</b> @Model.ControllerName<br />                <b>Action:</b> @Model.ActionName            </p>            <div style="overflow:scroll">                <pre>                    @Model.Exception.StackTrace                </pre>            </div>        </div>    }</div>


I've done pablo solution and I always had the error (MVC4)

The view 'Error' or its master was not found or no view engine supports the searched location.

To get rid of this, remove the line

 filters.Add(new HandleErrorAttribute());

in FilterConfig.cs


I do something that requires less coding than the other solutions posted.

First, in my web.config, I have the following:

<customErrors mode="On" defaultRedirect="~/ErrorPage/Oops">   <error redirect="~/ErrorPage/Oops/404" statusCode="404" />   <error redirect="~/ErrorPage/Oops/500" statusCode="500" /></customErrors>

And the controller (/Controllers/ErrorPageController.cs) contains the following:

public class ErrorPageController : Controller{    public ActionResult Oops(int id)    {        Response.StatusCode = id;        return View();    }}

And finally, the view contains the following (stripped down for simplicity, but it can conta:

@{ ViewBag.Title = "Oops! Error Encountered"; }<section id="Page">  <div class="col-xs-12 well">    <table cellspacing="5" cellpadding="3" style="background-color:#fff;width:100%;" class="table-responsive">      <tbody>        <tr>          <td valign="top" align="left" id="tableProps">            <img width="25" height="33" src="~/Images/PageError.gif" id="pagerrorImg">          </td>          <td width="360" valign="middle" align="left" id="tableProps2">            <h1 style="COLOR: black; FONT: 13pt/15pt verdana" id="errortype"><span id="errorText">@Response.Status</span></h1>          </td>        </tr>        <tr>          <td width="400" colspan="2" id="tablePropsWidth"><font style="COLOR: black; FONT: 8pt/11pt verdana">Possible causes:</font>          </td>        </tr>        <tr>          <td width="400" colspan="2" id="tablePropsWidth2">            <font style="COLOR: black; FONT: 8pt/11pt verdana" id="LID1">                            <hr>                            <ul>                                <li id="list1">                                    <span class="infotext">                                        <strong>Baptist explanation: </strong>There                                        must be sin in your life. Everyone else opened it fine.<br>                                    </span>                                </li>                                <li>                                    <span class="infotext">                                        <strong>Presbyterian explanation: </strong>It's                                        not God's will for you to open this link.<br>                                    </span>                                </li>                                <li>                                    <span class="infotext">                                        <strong> Word of Faith explanation:</strong>                                        You lack the faith to open this link. Your negative words have prevented                                        you from realizing this link's fulfillment.<br>                                    </span>                                </li>                                <li>                                    <span class="infotext">                                        <strong>Charismatic explanation: </strong>Thou                                        art loosed! Be commanded to OPEN!<br>                                    </span>                                </li>                                <li>                                    <span class="infotext">                                        <strong>Unitarian explanation:</strong> All                                        links are equal, so if this link doesn't work for you, feel free to                                        experiment with other links that might bring you joy and fulfillment.<br>                                    </span>                                </li>                                <li>                                    <span class="infotext">                                        <strong>Buddhist explanation:</strong> .........................<br>                                    </span>                                </li>                                <li>                                    <span class="infotext">                                        <strong>Episcopalian explanation:</strong>                                        Are you saying you have something against homosexuals?<br>                                    </span>                                </li>                                <li>                                    <span class="infotext">                                        <strong>Christian Science explanation: </strong>There                                        really is no link.<br>                                    </span>                                </li>                                <li>                                    <span class="infotext">                                        <strong>Atheist explanation: </strong>The only                                        reason you think this link exists is because you needed to invent it.<br>                                    </span>                                </li>                                <li>                                    <span class="infotext">                                        <strong>Church counselor's explanation:</strong>                                        And what did you feel when the link would not open?                                    </span>                                </li>                            </ul>                            <p>                                <br>                            </p>                            <h2 style="font:8pt/11pt verdana; color:black" id="ietext">                                <img width="16" height="16" align="top" src="~/Images/Search.gif">                                HTTP @Response.StatusCode - @Response.StatusDescription <br>                            </h2>                        </font>          </td>        </tr>      </tbody>    </table>  </div></section>