ASP.NET MVC& Angular:无法获取未定义或空引用的属性“id”

时间:2018-01-29 17:03:27

标签: c# asp.net asp.net-mvc angular controller

我在使用Angular应用程序显示数据库时遇到问题。 Controller和实体和API的所有其他必要类都在Visual Studio中完成。我测试了API,它的工作原理。

我在控制台中收到以下消息:“无法获取未定义或空引用的属性'id',这告诉我,我没有让Controller代码正确地与Angular应用程序通信。如果有人可以帮助引导我朝着正确的方向前进,我会非常感激,因为我对此很陌生。谢谢你:

// In the Repository
public async Task<List<TestTableTburns>> GetAllAsync()
 {
     var query = "SELECT Id, Name, CreateDate FROM TestTableTburns";

     using (var conn = _connectionFactory.Create())
     {
         try
         {
             var testTableTburns = await conn.QueryAsync<TestTableTburns>(query);

             return testTableTburns.ToList();
         }
         catch (Exception e)
         {
             Console.WriteLine(e);
             throw;
         }
     }
 }






// API call in the Controller, routes to api/test-table-tburns
 /// <summary>
 /// Gets data from test entity
 /// </summary>
 /// <response code="200">Data from test entity</response> 
 [HttpGet]
 [Route("api/test-table-tburns")]
 [ProducesResponseType(200, Type = typeof(List<TestTableTburnsModel>))]
 public async Task<IActionResult> GetAll()
 {
     try
     {
         IList results =
             (await _testTableTburnsRepository.GetAllAsync())
             .Select(_ => new TestTableTburnsModel { Id = _.Id, Name = _.Name, CreateDate = _.CreateDate }).ToList();

         return Ok(results);
     }
     catch (Exception e)
     {
         return StatusCode(500, e);
     }
 }

2 个答案:

答案 0 :(得分:0)

我实际上并不是很熟悉打字稿(这似乎是你处理角度的方式)。但是,从您提供的代码中,html模板没有控制器。你有一个模型,这是你的对象。你有一个处理模型数据的服务,你有你所谓的'组件',它对我来说就像一个控制器。

尽管如此,即使您使用“组件”和提供的html模板生成页面,您的html模板也没有标记“ng-controller”。在角度你必须指定你的代码的哪一部分能够访问控制器的数据,为此,你必须使用“ng-controller”标签,在你的情况下,在第一个内部就可以了。

如果您已经意识到这一点,并且在打字稿中处理Angular的方式不需要指示带有“ng-controller”标签的控制器,请忘记我说的一切。我想更多地了解它=)

答案 1 :(得分:0)

我没有运行你的代码,但我的猜测是你的http json响应与你想要解析的数据类型不匹配。根据您的代码,您的api响应应该看起来像这样

{
  "Id": '123',
  "Name": "Name",
  "CreatedDate": "2011-07-14T19:43:37+0100"
}

因此,当您看到您的TestTableTburnsModel具有小写属性并且json键处于Sentence case(首字母大写)时。所以尝试匹配它们,如

export class TestTableTburnsModel{
Id: string;
Name: string;
CreateDate: string;
}

PS。我知道按照javascript命名约定,首字母应该很小。但要与json匹配,你可以保持它们相似