2017-01-22 8 views
0

私が持っているHomeControllerの下に次のコントローラメソッド、MVCコントローラのメソッド呼び出しは、代わりにJSON結果の表示HTMLを返す

[HttpGet] 
     public ActionResult GetStudents() 
     { 
      Student std1 = new Student(); 
      List<Student> stdlst = new List<Student>(); 
      std1.Id = 1; 
      std1.Name = "Emmanuvel"; 
      std1.Age = 25; 
      stdlst.Add(std1); 

      Student std2 = new Student(); 
      std2.Id = 2; 
      std2.Name = "Michael"; 
      std2.Age = 24; 
      stdlst.Add(std2); 

      Student std3 = new Student(); 
      std3.Id = 3; 
      std3.Name = "Hannah"; 
      std3.Age = 22; 
      stdlst.Add(std3); 

      return Json(stdlst, JsonRequestBehavior.AllowGet); 
     } 

そして、私は以下のようにAngularjsのAjax機能を使用してこのメ​​ソッドを呼んでいる、

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.9/angular.min.js"></script> 
<script type="text/javascript"> 
var app = angular.module('MyApp', []) 
app.controller('MyController', function ($scope, $http, $window) { 
    $scope.ButtonClick = function() {    
     $http.get('@Url.Action("GetStudents","Home")') 
      .success(function (data) { 
       $scope.students = data; 
       console.log($scope.students);      
      }) 
      .error(function (data) { 
       console.log(data); 
      }); 
    } 
}); 
</script> 

残念ながら、console.logはJSONデータではなく、表示ページのHTMLコードを印刷します。ここにconsole.logの出力があります。

<!DOCTYPE html> 

<html> 
<head> 
    <meta name="viewport" content="width=device-width"/> 
    <title>Index</title> 
</head> 
<body> 


    <div ng-app="MyApp" ng-controller="MyController"> 
     <input type="button" value="Submit" ng-click="ButtonClick()"/> 
    </div> 

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.9/angular.min.js"></script> 
    <script type="text/javascript"> 
    var app = angular.module('MyApp', []) 
    app.controller('MyController', function ($scope, $http, $window) { 
     $scope.ButtonClick = function() {    
      $http.get('/Home/GetStudents') 
       .success(function (data) { 
        $scope.students = data; 
        console.log($scope.students);      
       }) 
       .error(function (data) { 
        console.log(data); 
       }); 
     } 
    }); 
    </script> 
</body> 
</html> 

私はこのコードで間違ったことを理解してください。

+0

* *はHTMLコード内に*ありますか?それは実際の結果ではなく、例外ページですか?あなたの@ Url.Action()が世話をしていない場合、サーバは何らかの 'route not found'を返します。これはHTMLの開発者"ヘルプ "ページに来ます...ちょっと考えました – Felix

+0

私は持っていますhtmlのボタンだけでAjax関数を呼び出す、コンソールログはそのHTMLコードを返す、私はどのようなログ印刷の質問を更新しました。 –

+0

ActionメソッドのシグネチャをActionResultからJsonResultに変更してクリアします。また、あなたはエリアを使っていませんか? – Saravanan

答えて

0

私がそこで行うことになる多くの変更があります。 まず、ビューから角度コードを分離します。おそらくRazorの構文を使ってURLを構築することができましたが、今はそれに依存しています。

  1. 動きそれ自身のファイルへの角度コントローラ:

    は、私は何だろうと、このです。

  2. JavaScript URLを '/ Home/GetStudents'に変更します
  3. バックエンドコントローラの戻り値の型をActionResultではなくJsonResultに変更します。結果にJsonを渡しても、ActionResultであるため、ページのHTMLが返されます。

これですべての作業を完了したら、ブラウザで「/ Home/GetStudents」のURLを自分で呼び出して適切なデータを受信して​​いることを確認します。確認が終わったら、いくつかのブレークポイントを追加し、Angularがデータを適切に受信していることを確認してから、そこから続行してください。

関連する問題