2015-10-30 2 views
2

Я учусь AngularJS поэтому, пожалуйста, голые со мной, у меня есть форма HTML, который имеет следующие значения:модели передачи на веб-АФИ в AngularJS

<input ng-model="person.id"/><br/> 
<input ng-model="person.name" /><br /> 
<input ng-model="person.lastname" /><br /> 
<button ng-click="callAPI()">Call API</button> 

При нажатии я вызываю эту функцию

$scope.callAPI = function() { 

    var person = { 
     id: $scope.person.id, 
     name: $scope.person.name, 
     lastname: $scope.person.lastname 
    }; 

    $http.post('/api/save/SavePerson', person).success(function (data) { 
     $scope.returnValue = data; 
    }).error(function (data) { 
     $scope.error = "An Error has occured while Saving person! " + data; 
     $scope.loading = false; 
    }); 
}; 

Я пытаюсь передать его на мой SavePerson метод в моем API, как показано здесь:

[System.Web.Http.AcceptVerbs("GET", "POST")] 
    [System.Web.Http.HttpGet] 
    public void SavePerson([FromBody]PersonModel person) 
    { 
     var dooda = string.Empty; 
    } 

PersonModel выглядит следующим образом:

public class PersonModel 
    { 
    public int id { get; set; } 
    public string name { get; set; } 
    public string lastname { get; set; } 
    } 

Однако, когда я нажимаю "CallAPI()" и попал в точку останова в SavePersonperson модель является нулевым?

ответ

2

Вам необходимо опубликовать объект конфигурации и поместить ваше лицо в качестве свойства данных.

$http.post('/api/save/SavePerson', {data:person}) 

Это должно получить его в теле для вас.

+1

Работал, спасибо, я приму ответ за десять минут, –

0

Никогда не читайте $ scope на своем контроллере. Это в конечном итоге приведет к тому, что вещи будут проверяться в будущем и не будут инкапсулировать «функцию функции». Используйте вместо этого:

<button ng-click="callAPI(person)">Call API</button> 

На контроллере,

$scope.callAPI = function (person) { 

и вам не нужно будет заполнять объект человека. К вашему запросу http вы пытались получить доступ к неправильному объекту. Вы получите объект «ответ», который содержит объект данных. И вы можете немного изменить свой код в соответствии с новым запросом $ http с использованием. Then вместо .success и .error.

$http.post('/api/save/SavePerson', person) 

    .then(function (response) { //Called on success. 
    $scope.returnValue = response.data; 

    }, function (response) { //Called on error 
    $scope.error = "An Error has occured while Saving person! " + response.data; 
    $scope.loading = false; 
    }); 

Попробуйте это и скажите, если это сработает. :)

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