【问题标题】:AngularJS - ui-router - MVC 5 - html5modeAngularJS - ui-router - MVC 5 - html5mode
【发布时间】:2014-12-21 20:50:26
【问题描述】:

我正在尝试使用 AngularJSMVC 5 创建一个迷你 SPA。除此之外,我想为 AngularJS 使用 ui-router 插件而不是 ng-route,并希望启用 html5mode

我的问题是,每当我单击锚元素时,它都会刷新页面并向 ASP.NET MVC 控制器发送请求并将所选视图放在正确的位置,我希望它不要重新加载。

如果我将 AngularJS 路由机制更改为 ng-route,那么它会按我的意愿工作,不会刷新页面,而是路由到选定的视图。

在 MVC 5 RouteConfig.cs 文件中,

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

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

在 AngularJS 的 app.js 文件中,

app.config(['$stateProvider', '$provide', '$locationProvider', '$urlRouterProvider', function ($stateProvider, $provide, $locationProvider, $urlRouterProvider) {

    $urlRouterProvider.otherwise('/Dashboard');

    $stateProvider
    .state("dashboard", {
        url: "/Dashboard",
        templateUrl: "AngularViews/dashboard.html"
    })

    .state("test", {
        url: "/Test",
        templateUrl: "AngularViews/test.html"
    });

    $locationProvider.html5Mode(true);
 }]);

_Layout.cshtml 文件中用于锚点;

 <a data-ui-sref="dashboard" title="Dashboard">

在同一 _Layout.cshtml 文件中用于视图占位符

 <div id="content" data-ui-view="" class="view-animate"></div>

如何在不重新加载页面的情况下让所有这些内容一起播放? 任何想法表示赞赏:)

【问题讨论】:

    标签: asp.net-mvc html angularjs angular-ui-router


    【解决方案1】:

    它可能对你有帮助!

    通过这样做:

    • 去除“app”路由的复杂性,使用标准路由。
    • 添加重写规则。
    • 从布局中删除基本 href。

    例如看起来像这样。

    public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.LowercaseUrls = true;
            routes.MapRoute("Default", "{controller}/{action}/{id}", new
            {
                controller = "Home",
                action = "Index",
                id = UrlParameter.Optional
            }).RouteHandler = new DashRouteHandler();
        }
    }
    

    public class DashRouteHandler : MvcRouteHandler
    {
        /// <summary>
        ///     Custom route handler that removes any dashes from the route before handling it.
        /// </summary>
        /// <param name="requestContext">The context of the given (current) request.</param>
        /// <returns></returns>
        protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            var routeValues = requestContext.RouteData.Values;
    
            routeValues["action"] = routeValues["action"].UnDash();
            routeValues["controller"] = routeValues["controller"].UnDash();
    
            return base.GetHttpHandler(requestContext);
        }
    }
    

    等等

    【讨论】:

      猜你喜欢
      • 2016-06-27
      • 2016-05-03
      • 2015-08-21
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      相关资源
      最近更新 更多