【问题标题】:ASP.NET with angularJS fails to load template带有 angularJS 的 ASP.NET 无法加载模板
【发布时间】:2015-02-21 01:39:48
【问题描述】:

我将 angularJS 应用程序从 xampp 移至 ASP.NET Visual Studio。当我加载我的应用程序时,我收到了找不到模板文件的错误消息。

我尝试了几种方法,但都没有奏效...有人知道问题出在哪里吗?

文件层次结构截图:

这里是包含模板的 JS 代码:

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

这里是 RouteConfig.cs(我保留它在我创建新项目时的状态)

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

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

【问题讨论】:

  • 你的控制器是什么样的?猜测一下,我建议不需要 .html。
  • @DaveWalker 你想知道什么控制器? ASP.NET 控制器为空,这是 angularJS 的 javascript 控制器
  • 我认为templateUrl应该是/Views/home/contacts.html
  • 那么.html是纯html?在这种情况下,Wayne 是正确的,您没有从站点的根目录中引用它们。如果您想让 MVC 生成控制器,那么您将在 HomeController 中执行操作(例如 public void AddContact() { return View();}
  • 模板是纯 HTML @DaveWalker 。我需要修改 HomeControlers.js 吗?我把它留空......

标签: javascript asp.net angularjs


【解决方案1】:

如果您使用的是 ASP.NET (MVCx ?) 的默认路由机制,并要求该应用提供 '/home/contacts.html' 之类的 url,则 ASP.NET 将查找文件调用 HomeController.cs,它将在其中查找名为“contacts.html”的操作。

因为默认模式是 {controller}/{action}/{id}。

向我们展示您的 RouteConfig.cs。您可能需要一个规则来绕过 ASP 的路由并将视图作为静态文件提供,以使其适用于 Angular。

我认为视图文件夹在 MVC 中具有特殊功能,不能用于提供静态文件。 将 .html 文件放在另一种静态目录中,然后从那里尝试。

编辑:

如果您想采用 SPA 方式,只需将您的 html 视图放在 ASP 项目根文件夹中的单独文件夹(例如:angularviews)中,然后像这样调整 RouteConfig.cs:

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

        //exclude template folder from routing
        routes.IgnoreRoute("angularviews/{*pathInfo}");

        //add routes for api calls and stuff you need mapped to an asp controller here
        /*
         ...
        */

        //always deliver the main template for all requests
        routes.MapRoute(
            name: "SPA",
            url: "{*catchall}",
            defaults: new { controller = "Home", action = "Index" }
        );

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

然后像 'angularviews/view1.html' 这样加载你的视图

【讨论】:

  • 感谢您的回答。我用您要求的 çode 编辑了我的帖子。
  • 使用调整后的 RouteConfig 编辑了我的答案以帮助您入门。
  • 我已经添加了您的代码,但问题仍然存在。我需要为每个 .html 模板定义 routes.MapRoute() 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 2015-11-15
  • 2018-03-09
  • 1970-01-01
  • 2013-04-21
  • 2021-05-23
相关资源
最近更新 更多