4

このリンクこのリンクの例に従おうとしていますが、エラーページを表示する代わりに、HTTP500内部サーバーエラーが発生します。<customErrors mode="On" />webconfigにセットがあります。[HandleError]コントローラークラスにフィルターを適用してみました。私もなしで試しました。Error.aspxは/Views/ Shared /にも存在するため、ファイルが見つからない場合はあり得ません。

コントローラのアクションメソッドでDivideByZero例外をスローしました。その例に従って、それらを必要とするすべてのアクションに対して個別のエラーページを指定できるようにします。

作成した空白のプロジェクトでaspxビューエンジンを使用しています。それがその理由ではないはずですよね?このためにマスターページも使用しています。私が見逃している可能性があるものはありますか?

ありがとう

編集-追加されたコード

このコードを新しいプロジェクトに追加し、web.configエントリを作成しました<customErrors mode="On" />

 [HandleError]
    public class HomeController : Controller
    {
        //
        // GET: /Home/
        [HandleError]
        public ActionResult Index()
        {

            throw new DivideByZeroException();
            return View();
        }

    }

うまくいきませんでした!次に、DivideByZeroExceptionと、aspxビューに追加されたばかりの無効なModel.Propertyについてコメントしました。どちらの場合も、内部サーバーエラーが発生しました。ドキュメントに従って、実行する必要のあるすべてのことを実行しました。同じ問題を抱えていて、それを解決できない人もたくさんいます。これはMVC3のバグですか?

4

3 に答える 3

4

本当に何が問題だったのか理解できたと思います。私のメインのホームページのインデックスはマスターページにありました。Visual Studioですぐに使用できるデフォルトのエラーページに同じマスターページを追加しましたが、それでうまくいきました。

ドキュメントは、この重要な要件をより明確に指摘する必要があります...それが実際に1つである場合。

[HandleError]もう1つの驚くべき啓示は、コントローラークラスを属性で装飾する必要がないことです。これがなくても、デフォルトのエラービューで機能します。アクションまたはコントローラーに特定のカスタムビューが必要な場合は、その属性を指定できます。そのようです:

[HandleError(View = "CustomError")]

...ここで、CustomError.aspxは、ビューの共有フォルダーまたはView-Controllerフォルダー自体のいずれかにある別のプレーンなaspxビューページです。

エラーをスローするメインの呼び出しページがマスターページにあるマスターページにエラーページを配置せずにこれを機能させた人はいますか?

于 2012-06-28T11:32:14.627 に答える
1

フィルタはすべてのHandleErrorエラーをキャッチするわけではありません。コントローラのアクション/アクションフィルタの外部で発生した例外はキャッチしません。また、ステータスコードが。以外のHTTP例外はキャッチしません500

したがって、例外がスローされる場所を確認する必要があります。また、カスタムエラーページを返すだけでなく、セクションHandleErrorでカスタムエラーページを設定する必要があります。customErrors

<customErrors defaultRedirect="error.htm" mode="On" 
  redirectMode="ResponseRewrite" />
于 2012-06-27T17:30:33.920 に答える
0

web.configでカスタムエラーがアクティブになっていることを確認してください。

<customErrors mode="On" />

また、~/Views/Shared/Error.aspxこれがエラーの場合にレンダリングされるものであるため、テンプレートが存在することを確認してください。

于 2012-06-27T16:47:32.380 に答える