7

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

独自のカスタム エラー ページを作成しました 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>

そして、HandleErrorフィルタを私の ActionMethod: Detailsas: に適用しました:

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

問題は、新しいカスタム エラー ページではなく、常に既定のビュー : Views/Shared/Error.aspxが呼び出されていることです。何かご意見は ?

4

4 に答える 4

3

これを試してください(ただし、MVCでこのコードが機能するかどうかはわかりません)。このコードを web.config ファイル brlow system.web の構成セクションに貼り付けます。

 <customErrors mode="On" defaultRedirect="ErrorPage.aspx">
    </customErrors>
    <compilation debug="true" targetFramework="4.0">
于 2013-08-12T08:39:58.260 に答える
2

役立つ可能性がある Web 構成ファイルにあるカスタム エラー タグを使用してみてください。

サンプルはこちら

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

    <customErrors mode="On" defaultRedirect="ErrorPage.aspx"></customErrors>
  </system.web>
于 2013-08-14T04:48:51.157 に答える
1

解決策は、私のProductControllerクラスにもorderプロパティを次のように設定する必要があることです。

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

これが意味すること: Order 値を 2 にすると、より高い順序の HandleError フィルターが利用できない場合にのみ、コントローラー全体のフィルターが適用されるようになります。

そして、これは完全に機能しました。私の web.config 設定は次のとおり <customErrors mode="On" />です。

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

注:HandleError最初はフィルターに orderプロパティ がありませんでした。

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

引数なしで HandleError フィルターを適用すると、フィルターの対象となるメソッドによって例外がスローされた場合にViews/Shared/Error.aspxビューが使用されるように指定されます。

于 2013-09-02T04:10:26.880 に答える
0

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

于 2013-08-12T08:55:01.747 に答える