2

Durandal SPA テンプレートをロードして、(URL に「assdf」などを追加することによって) 偽の URL に移動しようとしても、URL は維持され、エラーは提供されません。無効な URL がユーザーにエラー ページを表示するように、これをどのように変更できますか? URL が機能するかどうか疑問に思うユーザーを放置するよりは、エラーの方がよいと思います。

4

1 に答える 1

2

handleInvalidRoute を見たことがありますか:

http://durandaljs.com/documentation/Router/

たとえばホット タオルでは、ユーザーにエラー トーストを表示するために使用されます。

編集:たとえば、基本的なエラー ビューを作成し、これを main.js に追加すると、動作するように見えますが、ホット タオルでユーザーにエラーを表示するには、うなり声タイプのアプローチを好むと思います。

    app.start().then(function() {
        //Replace 'viewmodels' in the moduleId with 'views' to locate the view.
        //Look for partial views in a 'views' folder in the root.
        viewLocator.useConvention();

        // ** ADDED **
        router.handleInvalidRoute = function (route, params) {
            router.navigateTo('#/error');
        };

        //configure routing
        router.useConvention();
        router.mapNav('welcome');
        router.mapNav('flickr');

        // ** ADDED **
        router.mapRoute('error', 'viewmodels/error', 'error', false);

        app.adaptToDevice();

        //Show the app by setting the root view model for our application with a transition.
        app.setRoot('viewmodels/shell', 'entrance');
    });

EDIT2: 通常の URL (durandal\sammy によって処理されるハッシュ化されたものではない) も心配している場合は、durandal の外部で処理する必要があります。つまり、global.asax に次のようなものを入れることができます。

protected void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();

    Response.Clear();

    var httpException = exception as HttpException;

    if(httpException != null) //It's an Http Exception, Let's handle it.
    {
        switch (httpException.GetHttpCode())
        {
            case 404:
                // Page not found.
                Response.Redirect("~/#/error");
                break;
        }
    }
}

より完全なアプローチについては、こちらを参照してください: ASP.NET MVC で 404 を適切に処理するにはどうすればよいですか?

于 2013-04-14T22:38:20.577 に答える