2015-09-12 2 views
1

Я новичок в angularjs, и я делаю веб-сайт с использованием ASP.NET MVC и AngularJs.I использовал angularjs ui router для маршрута с одной страницы на другую.
С тегом ui-sref все в порядке, но когда пользователь обновляет страницу браузера или вводит URL-адрес, он не соответствует состоянию.
Вопрос в том, как устанавливать состояния и какие действия необходимы в моих контроллерах. вот мои коды. Если мне нужен другой код.

мой контроллерошибка при обновлении страницы angularjs ui router

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

    public ActionResult NewsListPage() 
    { 
     return Redirect("#NewsListPage"); 
    } 

    public ActionResult NewsDetailPage(int? newsId) 
    { 
     return Redirect("#NewsDetailPage"); 
    } 

мой основной угловой файл, включая создание модуля и конфигурации

var app = angular.module('abtinApp', ['ui.router']); 

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

    $stateProvider 
     .state('A', 
     { 
      url: '/News/NewsListPage', 
      templateUrl: '/Angular/NewsListPage' 
     }) 
     .state('B', 
     { 
      url: '/News/NewsDetailPage/:newsId', 
      templateUrl: '/Angular/NewsDetailPage' 
     }) 
     .state('C', 
     { 
      url: '^/News/NewsDetailPage/:newsId', 
      templateUrl: '/Angular/NewsDetailPage' 
     }); 

    $urlRouterProvider.otherwise('/News/NewsListPage'); 
    $locationProvider.html5Mode({ enabled: true, requireBase: false }); 

} 
]); 

мой index.cshtml

... 
<div ng-app="abtinApp"> 
      <a ui-sref=".A">Main</a> 
      <a ui-sref=".B">Detail</a> 
      <div ui-view></div> 
     </div> 
... 

угловой контроллер

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

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

и NewsDetailPage.cshtml

<div ng-controller="NewsDetailController"> 
    <h3>Details</h3> 

    <h3>{{newsId}}</h3> 
</div> 

и NewsListPage.cshtml

<h3>News</h3> 
<div ng-controller="NewsController"> 
<div ng-repeat="newsItem in newsToShow"> 
<h3> 
    <a ui-sref="B({newsId: '{{newsItem.Id}}'})"> {{newsItem.Title}}</a> 
</h3> 
<p> 
    {{newsItem.NewsSummary}} 
</p> 
</div> 
</div> 

нет ничего особенного в моих угловых контроллерах. спасибо.

+0

https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode. В частности, либо IIS переписывает в web.config, либо перезаписывает C# в Global.asax. – Claies

+0

также вы должны знать об осложнениях использования 'requireBase: false'; Без тега '' первоначальный URL-адрес должен соответствовать точно в каждом экземпляре, создавая относительные URL-адреса относительно * сервера *, а не по отношению к другим страницам приложения. – Claies

+0

@Claies: вы имеете в виду, что я копирую код C# в моем golbal.asax? –

ответ

1

После поиска много и тратить некоторое время, я узнал, удалив
$ locationProvider.html5Mode ({включено: правда, requireBase ложь});
все прекрасно, но новая проблема будет уродливыми URL-адресами, которые для меня не важны.
все равно какой-либо другой ответ будет оценен.

Смежные вопросы