2013-08-12 23 views
7

Devo implementare la mia pagina di errore personalizzata in MVC 4. Fondamentalmente quando gli utenti cercano di visualizzare Details di qualsiasi prodotto con ID prodotto inesistente, voglio questa pagina di errore personalizzata.La pagina di errore personalizzata non viene chiamata

ho creato la mia pagina di errore personalizzata NotFound.aspx

Il contenuto all'interno di questa pagina è:

<%@ 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> 

e poi applicato il filtro HandleError alla mia ActionMethod: Details come:

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

Il problema è che, Sempre la vista predefinita: Views/Shared/Error.aspx viene chiamato e non il nuovo errore personalizzato pagina. Qualche idea ?

risposta

1

La soluzione è che la mia classe ProductController ha anche bisogno di avere la proprietà order impostato come:

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

ciò che questo significa: un valore di Ordine di 2 assicurerà che il filtro a livello di controller verrà applicato solo se non esiste un filtro HandleError con un ordine superiore disponibile.

E questo ha funzionato perfettamente. Le mie impostazioni web.config sono: <customErrors mode="On" />.

Questo è tutto. Il defaultRedirect non è affatto necessario.

NOTA: ho avuto il filtro HandleError inizialmente con nessuna proprietà order.

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

Quando si applica il filtro HandleError senza argomenti, si specifica che qualsiasi eccezione lanciata dai metodi coperte dal filtro si tradurrà in vista Views/Shared/Error.aspx in uso.

3

Prova questo (ma non sono sicuro di lavorare su questo codice in MVC). Incolla questo codice nella sezione di configurazione nel file web.config brlow system.web.

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

La modalità CustomErrors era già attiva. Altrimenti, se fosse stato spento, anche la pagina di errore predefinita non si sarebbe mostrata. Altre idee ??? –

+2

In realtà non ho idea del MVC. –

0

assicurarsi che l'azione "non trovata" e l'azione "dettagli" nello stesso controller. In caso contrario, è necessario specificare il nome del controller o inserire il file notfound.aspx nella cartella condivisa

+0

È solo nella cartella condivisa. E not found non è un'azione, solo una vista. –

+1

Scusa, l'avevo frainteso prima! Hai buttato un Http 404 dal metodo action? In realtà, se l'expcetion non è un http 500, HandleError lo ignorerà. Forse questo è il motivo per cui mostra sempre la vista predefinita. – shimron

2

Provare a utilizzare tag di errori personalizzati presenti nel file di configurazione Web che potrebbero essere di aiuto.

Ecco il campione

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

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

Non ha funzionato. Anche se rimuovo l'attributo di reindirizzamento predefinito, mi porta al mio defaultview di errore. quindi sicuramente penso che non abbia alcun ruolo da svolgere qui. –

Problemi correlati