当前位置: 首页 > 面试题库 >

刷新页面时,RouteConfig触发500错误

程峻
2023-03-14
问题内容

我正在将angularJS与一起使用ASP.NET。当我运行Web应用程序时,所有链接均正常工作,并且没有500错误。

但是,当我刷新页面时,出现了500条这样的错误:

找不到部分视图“联系人”,或者没有视图引擎支持搜索到的位置。搜索了以下位置:

我正在使用angularJS控制器从./templates文件夹中加载模板,而angularJS做得很好。

有人知道为什么我会收到此错误以及如何解决该错误吗?

在View文件夹中也只有Index.cshtml文件,因为我从./templates目录加载模板,这是RouteConfig.cs代码:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute("templates", "templates/{action}.html",
         new { controller = "Home", action = "Templates", name = "" }
        );
        routes.MapRoute("contacts","contacts",
           new { controller = "Home", action = "Contacts", id = UrlParameter.Optional }
       );
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

控制器类:

public ActionResult Index()
{
    return View();
}

// ActionResult prikazan ispod služi da bi angularJS 
// mogao lodati HTML template u template folderu
public ActionResult Contacts()
{
    return PartialView();
}

public ActionResult Templates()
{
    return PartialView();

}

这是angularJS路由配置:

app.config(function ($routeProvider, $locationProvider) {
    $routeProvider
        .when('/contacts',
            {
                controller: 'ContactsController',
                templateUrl: 'templates/contacts.html'
            })
        .when('/add-contact',
            {
                controller: 'ContactAddController',
                templateUrl: 'templates/addContact.html'
            })
        .when('/edit-contact/:contactId',
            {
                controller: 'ContactEditController',
                templateUrl: 'templates/editContact.html'
            })
        .when('/display-contact/:contactId',
            {
                controller: 'ContactDetailsController',
                templateUrl: 'templates/displayContact.html'
            })

        .when('/bookmarked-contacts',
            {
                controller: 'ContactsController',
                templateUrl: 'templates/bookmarkedContacts.html'
            })
        .when('/search-contacts',
            {
                controller: 'SearchContactsController',
                templateUrl: 'templates/searchContacts.html'
            })
        .otherwise({ redirectTo: '/contacts' });
    $locationProvider.html5Mode(true);

});

问题答案:

该问题与不当放置server侧有关。首先尝试关闭html5模式

//$locationProvider.html5Mode(true);
$locationProvider.html5Mode({enabled: false});

并在刷新后检查是否一切正常。这应该。

像这样更改路由:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("fonts*.woff");
routes.IgnoreRoute("*.js");
routes.IgnoreRoute("*.html");
routes.IgnoreRoute("*.css");
routes.IgnoreRoute("api/*");

routes.MapRoute(
    name: "Default",
    url: "{dummyController}/{dummyAction}/{dummy1}/{dummy2}/{dummy3}",
    defaults: new { controller = "Home", action = "Index"
        , dummyController = UrlParameter.Optional
        , dummyAction = UrlParameter.Optional
        , dummy1 = UrlParameter.Optional
        , dummy2 = UrlParameter.Optional
        , dummy3 = UrlParameter.Optional
    }
);

这应该做我们需要的。每当服务器有任何异常时:

  • 它以js,html,css结尾…返回
  • /api/ (ASP.NET Web API)也被跳过
  • 并将任何类似的网址/somestuff/somepart视为Home/Index

此设置url: "{dummyController}/{dummyAction}/{id}",可以进行以上操作。来自html5mode的任何部分都被视为路由键“
dummyController”,“ dummyAction”,而Home和Index在默认情况下作为控制器和操作传递:new { controller = "Home", action = "Index" ...

并且由于您的应用程序期望路由的某些部分,因此您应该像这样使用它:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("fonts*.woff");
    routes.IgnoreRoute("*.js");
    routes.IgnoreRoute("*.html");
    routes.IgnoreRoute("*.css");
    routes.IgnoreRoute("api/*");

    // keep this application special settings
    routes.MapRoute("templates", "templates/{action}.html",
     new { controller = "Home", action = "Templates", name = "" }
    );
    routes.MapRoute("contacts","contacts",
       new { controller = "Home", action = "Contacts", id = UrlParameter.Optional }
    );

    // this should do the job on F5
    routes.MapRoute(
        name: "Default",
        url: "{dummyController}/{dummyAction}/{dummy1}/{dummy2}/{dummy3}",
        defaults: new { controller = "Home", action = "Index"
            , dummyController = UrlParameter.Optional
            , dummyAction = UrlParameter.Optional
            , dummy1 = UrlParameter.Optional
            , dummy2 = UrlParameter.Optional
            , dummy3 = UrlParameter.Optional
        }

);

也检查一下

[如何:配置服务器以使用html5Mode](https://github.com/angular-ui/ui-

router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-
with-html5mode)



 类似资料:
  • 任何关于如何在codenameone中触发Pull以刷新的代码示例都将受到欢迎。添加pull来刷新很简单,但我有一个用例,我需要pull来刷新在表单的post显示后自动完成。

  • 问题内容: 我有一个文件,其中我在页面顶部显示外部页面(使用iframe),其他部分是写在文件中的html代码的输出。 HTML代码如下所示: 现在,我想以编程方式刷新页面而不刷新。 我的问题是我可以不刷新页面就刷新页面吗? 答案/提示将不胜感激。 问题答案: 该嵌在主HMTL页面(或在JSP)。因此,如果刷新页面,则肯定会再次加载iframe。 为了避免这种情况,我可以考虑以下两种选择: 使用A

  • 问题内容: 我是新手。我正在使用获取对象列表并将其显示在第一页上的服务。然后根据单击的对象,在下一页上设置选项卡标题。但是,当我刷新页面时,列表的范围丢失了,并且选项卡头引发了异常,导致页面无法显示信息。即使刷新第二页,是否可以保留上一个屏幕上单击了哪个对象的信息? 问题答案: 您可以使用角度本地存储 角度本地存储 示例如何使用它: 使用本地存储的示例

  • 本文向大家介绍AngularJS实现页面定时刷新,包括了AngularJS实现页面定时刷新的使用技巧和注意事项,需要的朋友参考一下 有时我们在前端可能会有这样的需求: 1、每隔一段时间刷新一下页面中的数据 2、根据需要可以暂停和启用刷新 接下来我们就来看下AngularJS的实现方法: 首先我们了解到AngularJS中$interval可以用来处理间歇性处理一些事情,那么我们的间歇性刷新就使用i

  • 从…起https://spring.io/guides/gs/centralized-configuration/: 您可以强制bean刷新其配置(即从Config Server中提取更新的值),方法是使用Spring Cloud Config@RenewScope注释MessageRestController,然后触发刷新事件。 我们如何触发此刷新事件(对于带有

  • 问题内容: 我知道有一些关于该主题的帖子。我已经阅读了大多数内容,但是我认为我不够熟练,无法理解应该怎么做。 我有一个AngularJS 1.0.7 Web应用程序。我刚刚将其配置为html5Mode以美化我的URL。我的网址现在看起来不错,但是出现了一个新的问题,我在更改之前没有遇到过。首次加载索引页面时,可以毫无问题地对其进行刷新。但是,如果我导航到示例/ about中的其他页面,然后刷新页面