1

我在我的MVC控制器的以下操作:角度获取数据

[HttpPost] 
public JsonResult Save(TestModel model) 
{ 
    var newId = _myService.CreateItem(model); 
    return Json(newId); 
} 

这将运行并返回一个ID,我看到它在提琴手返回例如因为它不42.但是我的角码没有获得数字,但返回的值显示为数据:b,其中包含一个承诺。有没有办法获得成功方法的数据中返回的号码?我的角度代码如下:

vm.save = function() { 
TestRepository.save(vm.MyData).$promise.then(
    function (data) { 
     // Here data is returned as data : b, not the number 
    }, 
    function() { 
     alert('An error occurred while creating this record.'); 
    }); 
} 

我的服务就是

function TestRepository($resource) { 
return { 
    save: function (item) { 
     return $resource('/mysite/setup/Save').save(item); 
    } 
} 

该服务能够调用Action,因为我看到的代码打我的断点,我可以看到NEWID也设置为42,但我从来没有看到它回到了有角度的一面。

+0

你能发布的console.log的'(数据)的结果;' – Hackerman

+0

@Hackerman打印出B {$承诺:d,$解决:真正} 如果我返回的是一个对象而不是数字,那么数据包含对象,也许这个数字不会以JSON形式返回,因为Fiddler显示响应仅为42,而不是JSON格式。 – Paritosh

回答

3

$resource doesn't support primitive response

由于$resource通常用于与RESTful服务连接起来,做很好地形成物体发送数据,这是所有API怎么做。从原始类型的API发送数据阻止人们使用不良模式。理想情况下,它应该只返回JSON对象。

[HttpPost] 
public JsonResult Save(TestModel model) 
{ 
    var newId = _myService.CreateItem(model); 
    return Json(new {Id = newId}); 
} 

代码

vm.save = function() { 
    TestRepository.save(vm.MyData).$promise.then(
     function (data) { 
      console.log(data.Id) 
     }, 
     function() { 
      alert('An error occurred while creating this record.'); 
     } 
    ); 
}