2012-11-27 104 views
0

我試圖在已經存在的MVC 3網站中使用Angular。我已經獲得了我的主要ngApp與第一個加載的項目的工作,但只要我添加一個模塊並嘗試實施$routeParams看起來,路由提供商開始分解。在我的MVC 3應用程序中,我有一個有效的路由/Article/ReadArticle/key路由,它允許密鑰爲空,並且我有相應的Controller/Action來提供所請求的文章。如果key爲空或空,則它提供最新輸入的文章。我有另一個後置操作,除了返回一個JsonResult而不是一個視圖之外,它的功能相同。角度路線不符合Asp.Net MVC 3

我修改了我的視圖,排除了任何MVC構造的模型,因此該動作只是簡單地返回本質上具有所有角度模板的html頁面。角度控制器調用JsonResult的後置動作,並且都是桃色的。我說根據樣本路由角模塊,但由於某些原因,它似乎並沒有被追趕的路線:

'use strict'; 

/* App Module */ 

angular.module('je', []). 
    config(['$routeProvider', function ($routeProvider) { 
     $routeProvider. 
     when('/Article/ReadArticle/:key', { templateUrl: '/Angular/ArticleView.html', controller: ArticleCtrl }) //. 
     //otherwise({ templateUrl: '/Angular/ArticleView.html', controller: ArticleCtrl }); 
    } ]); 

我註釋掉otherwise電話。如果我把它留在那裏,它可以工作,但只能帶上默認文章。手動輸入有效路線(如/Article/ReadArticle/Some_Valid_Key)不會產生任何合適的$routeParams。註釋出來,沒有路線匹配,所以沒有模板加載,頁面是空白的。

function ArticleCtrl($scope, $routeParams, $http) { 
    console.log($routeParams.key); 
    $http.post("/Article/GetArticleText", { "textkey": $routeParams.key }).success(function (data) { 
     console.log(data); 
     $scope.article = data; 
    }). 
    error(function (data, status) { 
     console.log(data); 
     console.log("Request failed"); 
     console.log(status); 
    }); 
} 

按照試樣,我的期望是$routeParams.key應該Some_Valid_Key在這一點進行填充。顯然,我的期望不符合現實,但我錯過了什麼讓路線行爲?

回答

0

AngularJS路由在URL的散列之後定義。因此,在您的方案中,您的基本網址爲/Article/ReadArticle/key,目前沒有路線定義。這就是爲什麼您的默認路線正在遵循(在註釋掉otherwise一行之前)。爲了使AngularJS遵循您定義的路線,您的網址必須如下所示:http://mysite.com/someurl/#/Article/ReadArticle/Some_Valid_Key

+1

當我將Microsoft MVC排除在等式之外時,該路線起作用。將角度路由調整爲「繞過」MVC路由只會導致MVC路由問題。 MVC路由和角度路由之間似乎有衝突。 –

+0

似乎角度路由和查看結果是不兼容的。我開始認爲唯一可能的行動方式是不使用viewresults,而只是使用jsonresults。如果有人已成功使用viewresult和angularjs,請分享您的經驗。謝謝! –

+0

當你開始使用JavaScript MVC時,viewResults和viewcontrollers幾乎沒有什麼意義,除了解析相同的Index.html/aspx的單個視圖控制器或最終調用主文件。 (IMO) – Jens