2013-08-12 17 views
7

Ich muss meine eigene benutzerdefinierte Fehlerseite in MVC 4 implementieren. Grundsätzlich, wenn Benutzer versuchen, Details eines Produkts mit nicht vorhandenen ProductID anzuzeigen, möchte ich diese benutzerdefinierte Fehlerseite.Benutzerdefinierte Fehlerseite wird nicht aufgerufen

ich meine eigene benutzerdefinierte Fehlerseite NotFound.aspx

Der Innen Inhalt dieser Seite ist:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Simple.Master" 
Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>" %> 
<asp:Content ID="errorTitle" ContentPlaceHolderID="TitleContent" runat="server"> 
Error 
</asp:Content> 
<asp:Content ID="errorContent" ContentPlaceHolderID="MainContent" runat="server"> 
<h2> 
Sorry, you requested a product that doesn't exist. Make sure you 
requested a valid ProductID 
</h2> 
</asp:Content> 

Und dann angewendet, um die HandleError Filter auf meine ActionMethod: Details wie:

[HandleError(View="NotFound")] 
public ActionResult Details(int id) {... 

Das Problem ist, dass immer die Standardansicht: Views/Shared/Error.aspx aufgerufen wird und nicht der neue benutzerdefinierte Fehler Seite. Irgendwelche Gedanken?

Antwort

1

Die Lösung ist, dass meine ProductController Klasse auch haben, muss die order Eigenschaft als:

[HandleError(Order=2)] 
public class ProductController : Controller { ... } 

Was dies bedeutet: einen Auftragswert von 2 stellt sicher, dass der Controller-weite Filter nur angewendet wird, wenn kein HandleError-Filter mit einer höheren verfügbaren Reihenfolge vorhanden ist.

Und das hat perfekt funktioniert. Meine web.config Einstellung ist: <customErrors mode="On" />.

Das ist es. Die defaultRedirect wird überhaupt nicht benötigt.

HINWEIS: Ich hatte den HandleError Filter zunächst mit NO order Eigenschaft.

[HandleError] 
public class ProductController : Controller { ... } 

Wenn Sie das Handle Filter ohne Argumente gelten, geben Sie an, dass jede Ausnahme durch die Verfahren durch den Filter bedeckt geworfen werden in der Views/Shared/Error.aspx Ansicht zur Folge verwendet wird.

3

Versuchen Sie dies (aber ich bin nicht sicher über die Arbeit mit diesem Code in MVC). Fügen Sie diesen Code in den Konfigurationsabschnitt in der Datei web.config brlow system.web ein.

<customErrors mode="On" defaultRedirect="ErrorPage.aspx"> 
    </customErrors> 
    <compilation debug="true" targetFramework="4.0"> 
+0

Der CustomErrors-Modus war bereits aktiviert. Sonst, wenn es ausgeschaltet wäre, würde selbst die Standardfehlerseite nicht angezeigt. Irgendwelche anderen Ideen ??? –

+2

Eigentlich habe ich keine Ahnung von der MVC. –

0

sicherstellen, dass Ihre "notfound" Aktion und "Detail" Aktion in dem gleichen Controller. Andernfalls sollten Sie den Controller-Namen angeben, oder legen Sie die notfound.aspx unter dem freigegebenen Ordner

+0

Es ist nur unter freigegebenen Ordner. Und nicht gefunden ist keine Aktion, nur eine Ansicht. –

+1

Sorry, ich habe es vorher falsch verstanden! Hast du eine Http 404 von der Aktionsmethode geworfen? Wenn die expection keine http 500 ist, wird der HandleError diese ignorieren. Vielleicht ist das der Grund, warum immer die Standardansicht angezeigt wird. – shimron

2

Versuchen Sie, benutzerdefinierte Fehler Tag in der Web-Konfigurationsdatei gefunden, die Ihnen helfen könnte. Hier

ist die Probe

<system.web> 
    <--- other required may be used here--->  

    <customErrors mode="On" defaultRedirect="ErrorPage.aspx"></customErrors> 
    </system.web> 
+0

Hat nicht funktioniert. Selbst wenn ich das Standardumleitungsattribut entferne, bringt es mich zu meiner Standardansicht des Fehlers. Also, ich denke, es spielt hier keine Rolle. –

Verwandte Themen