2016-04-20 2 views
3

Я хочу получить список сотрудников, после нажатия на кнопку Get Data. Но JS-скрипт не вызывает public JsonResult GetData.Angularjs http get from ASP.NET

  1. Почему JS не вызывают public JsonResult GetData где ошибка?

  2. Как передать аргумент в '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

вы можете показать Web API конфигурации маршрутизации? – fikkatra

+0

откуда вы загружаете 'angular.js'? Я не вижу этого. –

+0

Вы пробовали вызывать URL-адрес непосредственно из адресной строки браузера? Это работает? Если вы установите точку останова при действии mvc, получится ли это? – DrinkBird

ответ

4

Предполагая, что вы сохранили конфигурации маршрутизации по умолчанию в MVC, попробуйте следующее:

$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'); 
     }); 
}; 

и передать идентификатор функции getData с точки зрения.

1

Вы должны передать его в качестве параметра в $ HTTP GET называют

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

В качестве параметра запроса будет прикреплен идентификатор. Это будет работать, потому что MVC попытается найти идентификатор в строке запроса, если он не может быть найден в URL-адресе. Однако это приведет к другому URL:/Home/GetData? Id = 123 вместо/Home/GetData/123. В зависимости от того, какой URL-адрес является предпочтительным, используйте параметры или прикрепите идентификатор непосредственно к URL-адресу – fikkatra

+0

@fikkatra. Я знаю .. если маршрут по умолчанию установлен правильно, как вы сказали, он должен быть похож на то, что вы предлагаете .. но в этом случае выше, очевидно, будет работать .. –

+0

Точно. Я просто пытался помочь OP сделать разумный выбор между нашими решениями. – fikkatra

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