2013-08-12 13 views
7

MVC 4で独自のカスタムエラーページを実装する必要があります。ユーザーがproductIDが存在しない製品のDetailsを表示しようとすると、このカスタムエラーページが必要になります。カスタムエラーページが呼び出されない

私はこのページの内のコンテンツがあるNotFound.aspx

私自身のカスタムエラーページを作成しました:

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

そして、私のActionMethodにHandleErrorフィルタ適用:としてDetailsを:

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

問題は、常にデフォルトのビュー:Views/Shared/Error.aspxが呼び出されていて、新しいカスタムエラーではありません。ページ。何かご意見は ?

答えて

1

ソリューションは私のProductControllerクラスはまた、のように設定order性質を持っている必要があることです高次の利用可能な HandleErrorフィルターがない場合にのみ、コントローラー全体のフィルターが適用されることを保証します。

これは完全に機能しました。私のweb.config設定は: <customErrors mode="On" />です。

これはそれです。 defaultRedirectはまったく必要ありません。

注: 私はNO orderプロパティで最初にHandleErrorフィルタを持っていました。あなたは引数なしのHandleErrorフィルタを適用すると

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

、あなたはフィルターでカバーメソッドによってスローされる例外 が使用されてViews/Shared/Error.aspxビューになりますように指定されています。

3

これを試してください(しかし、私はMVCでこのコードの作業についてはわかりません)。 web.configファイルbrlow system.webの設定セクションにこのコードを貼り付けます。

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

CustomErrorsモードは既にONになっています。それ以外の場合は、デフォルトのエラーページも表示されませんでした。他のアイデア??? –

+2

実際に私はMVCについて考えていません。 –

0

「notfound」アクションと「detail」アクションが同じコントローラ内にあることを確認してください。それ以外の場合は、コントローラ名を指定するか、notfound.aspxを共有フォルダの下に置く必要があります。

+0

共有フォルダの下にあります。そして、notfoundはアクションではなく、ただの視点です。 –

+1

申し訳ありません、私はそれを前に誤解しました!あなたはアクションメソッドからHttp 404を投げましたか?実際には、expcetionがhttp 500でない場合、HandleErrorはそれを無視します。たぶんこれが、常にデフォルトビューを表示する理由です。 – shimron

2

Web設定ファイルのカスタムエラータグを使用してみてください。

[HandleError(Order=2)] 
public class ProductController : Controller { ... } 
これは意味は何

:2の順序値をここで

はサンプル

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

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

働いていませんでした。たとえデフォルトのリダイレクト属性を削除しても、defaultviewのエラーになります。だから間違いなく私はそれがここでプレーする役割を持っていないと思う。 –

関連する問題