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

如何使用ASP.NET MVC和AngularJS路由?

贲文景
2023-03-14
问题内容

我正在研究一个新的ASP.NET
MVC和AngularJS应用程序,该应用程序旨在作为SPA的集合。我使用MVC区域概念来分隔每个单独的SPA,然后在每个MVC区域内使用AngularJS创建SPA。

由于我是AngularJS的新手,并且无法找到有关结合MVC和AngularJS路由的答案,因此我想在这里发表我的问题,以查看是否可以获得帮助。

我有标准的MVC路由设置,可用于每个MVC区域。

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapMvcAttributeRoutes();
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
        routes.AppendTrailingSlash = true;
    }

这可以正常工作,并为我提供如下网址:

http://servername/Application1/
http://servername/Application2/

现在,在每个应用程序区域中,我尝试使用AngularJS路由,也使用$
locationProvider.html5Mode(true);。这样我就可以在每个区域内获得客户端路由,例如:

http://servername/Application1/view1
http://servername/Application1/view2
http://servername/Application2/view1/view1a
http://servername/Application2/view2/view2a
http://servername/Application2/view3

这是我的Application1的AngularJS路由代码段:

app1.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
    var viewBase = '/Areas/Application1/app/views/';
    $routeProvider
        .when('/Application1/view1', {
            controller: 'View1Controller',
            templateUrl: viewBase + 'view1.html'
        })
        .when('/Application2/view2', {
            controller: 'View2Controller',
            templateUrl: viewBase + 'view2.html'
        })
        .otherwise({ redirectTo: '/Application1/view1' });
    $locationProvider.html5Mode(true);
}]);

因此,一开始它似乎可行(至少该URL看起来正确)。但是,当我开始在区域之间或区域中的视图之间导航时,或者即使我刷新了,某些东西也会“丢失”,并且一切都无法正常工作。该URL看起来仍然正确,但是找不到视图并且未正确加载。

关于如何使ASP.NET MVC和AngularJS路由一起工作的任何帮助/指南,都可以为我提供上述方案?

谢谢!!!


问题答案:

感谢您的回答,agbenyezi。我看了您提供的文章,但无论如何,它只能使我回到原来的状态。

但是,我能够弄清楚并使其正常运行。答案是相对简单的,但是花了一些时间和很多搜索。无论如何,由于我使用的是MVC区域,因此导航到URL
http://servername/Application1/view[x](其中Application1是MVC控制器(在该区域中),而view1,view2,view3等是Angularjs视图),整个应用程序的MVC部分变得令人困惑并尝试在Application1控制器(不存在)中找到一个名为view
[x]的操作。

因此,在区域的AreaRegistration类(在其中定义区域的特定路由)中,我只需要在任何默认的MVC路由之前添加一种包罗万象的路由,以始终将其强制应用于Application控制器上的Index操作。就像是:

        // Route override to work with Angularjs and HTML5 routing
        context.MapRoute(
            name: "Application1Override",
            url: "Application1/{*.}",
            defaults: new { controller = "Application1", action = "Index" }
        );

现在,当我导航到http://servername/Application1/view[x]它时,路由到Application1
MVC控制器,Index操作,然后Angularjs接管到不同视图的路由,所有这些都在URL中具有HTML5路由构造。

希望对别人有帮助。

谢谢!



 类似资料:
  • 问题内容: 我有一个单页应用程序,实际上只有一个页面。只有一个视图使用angularjs完成了许多javascript / ajax逻辑,但是没有路由到其他视图。 因此,我想在网址末尾混搭hashbang(#/)。我可以以某种方式完全关闭angularjs路由吗? 顺便说一句:我了解Htm5Mode,但是我希望它能在所有浏览器中使用。 问题答案: 如果没有定义,则不会进行路由,因此您的url中不会

  • 我正在尝试使用PathVariable创建一个包含Hello和name user的简单页面。如果你来的话http://localhost:8080/#/John你会在网站上看到“你好,约翰”。 我知道好Java,但在AngularJS我是初学者。 Hello控制器 HelloController在角 app.js 简单的页面hello/布局。html 谢谢你的帮助!

  • 我需要调用这个API在我的控制器得到它的数据。 这是我的控制器 以下是XML响应的外观:

  • 问题内容: 我正在尝试将新的Firebase与Auth系统一起使用,并在via中限制路由。 但是,我不太了解。 这就是我所拥有的。在我的.config函数中,我正在定义路由并初始化firebase。以下是我的配置块中。 我在新的文档站点上发现这些功能可用,这些功能在我的角度列表中列出。 现在,我上面的内容只是触发我访问网站上的任何URL。 所以我的问题是,我该如何获取.run()函数中的内容并将其

  • 问题内容: 我已经安装了Apache服务器,并且正在通过mod_wsgi处理Flask响应。我已经通过别名注册了WSGI脚本: [httpd.conf] 我在上面的路径中添加了相应的WSGI文件: [/mnt/www/wsgi-scripts/service.wsgi] 我有一个简单的Flask Python测试脚本,提供了服务模块: [/mnt/www/wsgi-scripts/service.

  • 问题内容: 我正在使用Express,它从静态目录加载AngularJS。通常,我会要求Express为其提供我和所有正确的Angular文件等。在我的Angular应用中,我有这些路由设置,它们替换了内容: 在我的主页上,我有到的链接,该链接将成功加载模板并将我定向到或指定的任何ID。问题是当我尝试将浏览器定向到页面或刷新页面时,请求将发送到Express / Node服务器,该服务器返回。 我