2

如果您加载 Durandal SPA 模板并尝试导航到虚假 URL(通过在 URL 中添加“assdf”之类的内容),则会保留该 URL,并且不会提供任何错误。如何更改这一点,以便无效 URL 为用户提供错误页面?我认为错误总比让用户想知道他们的 URL 是否有效要好。

4

1 回答 1

2

你有没有看过handleInvalidRoute:

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

例如,在 Hot Towel 中,它用于向用户显示错误吐司。

编辑:例如,我创建了一个基本的错误视图,然后将其添加到 main.js 并且它似乎可以工作,尽管我认为我更喜欢咆哮类型的方法来在 Hot Towel 中向用户显示错误。

    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:如果您也担心普通网址(不是由 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 回答