我在使用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);
}
}
答案 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匹配,你可以保持它们相似