我有一个从服务器调用的方法,我从一个表中检索了上下文,这都是正确的,但是在客户端,我不想使用FK ID在视图上显示,为此,我需要包括de FK表以获取所有值...首先,我有“ _context.Curso.Include(c => c.GrauAcademico);”但是在客户端上我没有从服务器端使用get方法,所以我删除了它。现在我很困惑,我也不知道如何包括FK表。
GET服务器方法
// GET: api/Curso
[HttpGet]
public IEnumerable<Curso> GetCurso()
{
return _context.Curso;
}
获取客户端方法
// GET: Cursos
public async Task<IActionResult> Index()
{
List<Curso> cursos = new List<Curso>();
string path = "api/Curso";
HttpResponseMessage response = await HttpRequestBuilder.WebApiClient.GetAsync(path);
//Checking the response is successful or not which is sent using HttpClient
if (response.IsSuccessStatusCode)
{
cursos = await response.Content.ReadAsAsync<List<Curso>>();
}
return View(cursos);
}
本地调试器
Index.cshtml
@model IEnumerable<ModelsLibrary.Curso>
@{
ViewData["Title"] = "Index";
}
<h2>Index</h2>
<p>
<a asp-action="Create">Create New</a>
</p>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Nome)
</th>
<th>
@Html.DisplayNameFor(model => model.GrauAcademico)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Nome)
</td>
<td>
@Html.DisplayFor(modelItem => item.GrauAcademico.TipoGrau)
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.CursoId">Edit</a> |
<a asp-action="Details" asp-route-id="@item.CursoId">Details</a>
|
<a asp-action="Delete" asp-route-id="@item.CursoId">Delete</a>
</td>
</tr>
}
</tbody>
</table>
您好想使用 GrauAcademico 表中的值,该表是 Curso 的FK,但是如果无法从表中获取值,就无法显示它们...
谢谢:)
答案 0 :(得分:0)
[HttpGet]
public IEnumerable<Curso> GetCurso()
{
return _context.Curso;
}
这是非常糟糕的形式,它将有效地通过网络返回该表中的所有行。试想一下,如果这是Users
表,将会发生什么(是的,我已经在做一个做到这一点的项目。
您应该做的是创建一个ViewModel,该ViewModel仅返回函数需要的记录和字段。
例如:
public class CursoViewModel
{
public int Id {get;set;}
public string Nome {get;set;}
public string TipoGrau {get;set;}
}
[HttpGet]
public IEnumerable<CursoViewModel> GetCurso()
{
var records = _context.Curso.Include(c=>c.GrauAcademico);
return records.Select(x=>new CursoViewModel
{
Id = x.Id,
Nome = x.Nome,
TipoGrau = x.GrauAcademico.Tipo,
}
}
这意味着您还必须在客户端具有此视图模型,但这没关系。
另一件事是,应该抽象化服务中的数据库访问,但这是另一个问题。