Asp.Net MVC with AngularJs route & ng-view

Asp.Net MVC with AngularJs route & ng-view

利用AngularJs的route來處理View(ng-view)…以下是處理的方式。

1. 在AngularJs的route設定

app.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
    $routeProvider.when('/', {
        templateUrl: '/Home/Detail',
        controller: 'HomeCtrl',
    }); 
}]);

2. Server Side – Controllers

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

       public ActionResult Detail()
       {
           return PartialView();
       }

3. View/Home

    a. _layout.cshtml

<!DOCTYPE html>
<html ng-app="myApp">
<head>    
....something something.....
</head>
<body>
    <div class="container">       
        @RenderBody()
        @RenderSection("scripts", required: false)
    </div>    
</body>
</html>

   b. Home/Index.cshtml

<ng-view></ng-view>

 

FYI: AngularJs提供了兩種網址顯示的方式(ref:http://docs.angularjs.org/guide/dev_guide.services.$location)

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

// Specify HTML5 mode (using the History APIs) or HashBang syntax.(Default)
    $locationProvider.html5Mode(false).hashPrefix('');

}]);

基本上,上列的三點就是基本的設定方式。就可以完成簡單的SPA了。

有幾個地方要注意的是

1. 如果跨ServerSide Controller時, 要注意return 的東西,是View還是PartialView, 如果是 Retrun View()時,網頁會陷入無窮迴圈中(***)

例如:  我有一個Controller叫Boards, 那我想要在View的地方也是顯示列表及詳細資料時,

    我的AngularJs的Route設定是

 $routeProvider.when('/Board', {
        templateUrl: '/Board/List',
        controller: 'BoardCtrl',
    }).when('/Board/:id', { templateUrl: '/Board/Detail', controller: 'BoardDetailCtrl' });

我的Controller是

public class BoardController : Controller
    {
        //
        // GET: /Board/

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

        public ActionResult List()
        {
            return PartialView();
        }

        public ActionResult Detail()
        {
            return PartialView();
        }

    }

View/Board/Index –> 空白頁面

View/Board/List –> 要顯示的內容

List要連結到Detail的連結會是

 <a href="~/#/Board/{{item.uid}}">link</a>

View/Board/Detail—>要顯示的內容

        Detail要回到List的連結會是

    $location.path('/Board');

or

 <a href="~/#/Board">link</a>

 

以上。