2016-04-20 8 views
3

Ich möchte Liste der Mitarbeiter erhalten, nach dem Klicken auf die Schaltfläche Get Data. Aber JS-Skript ruft public JsonResult GetData nicht auf.Angularjs http erhalten von ASP.NET

  1. Warum js rufe nicht public JsonResult GetData wo Fehler?

  2. Wie übergeben Sie das Argument in 'public JsonResult GetData (int id)'?

Homecontroller:

namespace AngularJS.Controllers 
{ 
public class HomeController : Controller 
{ 
    // 
    // GET: /Home/ 

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

    [HttpGet] 
    public JsonResult GetData(int id) 
    { 
     List<Employee> employees = new List<Employee>(); 
     employees.Add(new Employee{Name="Jhon"}); 
     employees.Add(new Employee{Name="Rick"}); 
     return Json(employees, JsonRequestBehavior.AllowGet); 
    } 
} 
public class Employee 
{ 
    public string Name { get; set; } 
} 
} 

MyScript.js

var app = angular.module("myApp", []); 

app.controller("calendarDemo", function($scope) { 
$scope.count = 0; 
$scope.getData = function() { 

    $http({ method: 'GET', url: '/Home/GetData' }). 
success(function (data, status, headers, config) { 
    //$scope.Employees = [{ name: 'Jhon' }, { name: 'Rick' }]; 
}). 
error(function (data, status, headers, config) { 
    alert('error'); 
}); 

} 
}); 

Index.cshtml:

@{ 
ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 
<script src="~/Scripts/CustomScripts/MyScript.js"></script> 
<script src="~/Scripts/moment.js"></script> 

<link rel="stylesheet/less" type="text/css" href="~/Scripts/CustomScripts/style.less"> 
<script src="~/Scripts/less-1.5.1.js" type="text/javascript"></script> 
    <li ng-repeat="employee in Employees"> 
     {{employee.name}} 
    </li> 
<button ng-click="getData()">Get Data</button> 
+0

können Sie die Web-api-Routing-Konfiguration zeigen? – fikkatra

+0

von wo laden Sie 'angular.js'? Ich kann es nicht sehen. –

+0

Haben Sie versucht, die URL direkt aus der Adressleiste des Browsers aufzurufen? Funktioniert es? Wenn Sie bei der Aktion "mvc" einen Haltepunkt setzen, wird er dann getroffen? – DrinkBird

Antwort

4

Vorausgesetzt, dass Sie die Standard-Routing-config in MVC gehalten, versuchen Sie dies:

$scope.getData = function (id) { 
    $http({ method: 'GET', url: '/Home/GetData/' + id }). 
     success(function (data, status, headers, config) { 
      //$scope.Employees = [{ name: 'Jhon' }, { name: 'Rick' }]; 
     }). 
     error(function (data, status, headers, config) { 
      alert('error'); 
     }); 
}; 

und übergeben Sie die ID an die getData Funktion aus der Sicht.

1

Sie sollten es als Parameter in $ http get übergeben werden, rufen

$http({ method: 'GET', url: '/Home/GetData', params: { id: id } }) 
+0

Dies wird die ID als Abfrageparameter anhängen. Dies funktioniert, weil MVC versucht, die ID in der Abfragezeichenfolge zu finden, wenn sie nicht in der URL gefunden wird. Dies führt jedoch zu einer anderen URL:/Home/GetData? Id = 123 anstelle von/Home/GetData/123. Abhängig davon, welche URL bevorzugt wird, benutze params oder füge die ID direkt an die URL an. – fikkatra

+0

@fikkatra Ich weiß .. wenn die Standardroute richtig eingestellt ist, wie du sagtest, sollte es so sein, wie du es vorschreibst .. aber in diesem Fall wird offensichtlich funktionieren .. –

+0

Genau. Ich habe nur versucht, dem OP zu helfen, eine vernünftige Wahl zwischen unseren Lösungen zu treffen. – fikkatra

Verwandte Themen