[英]ASP.NET MVC EF Core, Property Access in View while on selected ID for different Model
我有一个问题,我有三个模型,如下所示: Person
, Competence
与PersonCompetence
之间。 我当前的控制器方法从上一页获取 Id 并显示此人的Competence
和Level
列表。 但是,在此视图中,我想为新的Competence
一个POST 。 因此,同时您正在添加一个新的,并且您可以看到您已经拥有哪些。
使用我现在拥有的控制器方法,我可以在显示列表时访问PersonCompetence
和Competence
。 我无权访问在AddComp
视图中标记为 ###### 的asp-for="Competence"
的Competence
属性。
ID
POST给正确的人CompetenceType
PersonCompetence
来显示当前PersonCompetence
的列表。 我通过当前的@model CompetenceRadar.Models.Person
得到了这一点,我只能达到 Person 属性。
我已经看过一个ViewModel
可以访问所有表,每个表都有一个IEnumerable
,但是当我搜索显示的人的 Id 时,这会破坏我当前的控制器。 我已经在视图中切换了@model
,但随后我无法访问人员 ID/姓名。
那么我如何访问Competence
属性,列出一个人并获取该人的PersonCompetences
列表。
如果你想让我澄清一些事情,请告诉我。 我不需要工作代码,只需要为我指明解决方案的正确方向。
asp-for
属性的情况下发布吗?楷模
public class Person
{
public int ID { get; set; }
public string FirstName { get; set; }
public ICollection<PersonCompetences> PersonCompetences { get; set; }
}
public class PersonCompetence
{
public int ID { get; set; }
public int PersonID { get; set; } // FK
public int CompetenceID { get; set; } // FK
public int Level { get; set; }
public Competece Competence { get; set; }
public Person Person { get; set; }
}
public class Competence
{
public int ID { get; set; }
public string CompetenceType { get; set; }
public string CompetenceCategory { get; set; }
public ICollection<PersonCompetence> PersonCompetences { get; set; }
}
AddComp
功能
public async Task<IActionResult> AddComp(int? id)
{
var person = await _context.Personer
.Include(pk => pk.PersonCompetences)
.ThenInclude(k => k.Competence)
.FirstOrDefaultAsync(m => m.ID == id);
return View(person);
}
View_AddComp
视图AddComp
@model CompetenceRadar.Models.Person
<h1>AddComp</h1>
<div class="row">
<form asp-action="AddComp">
<input type="hidden" asp-for="ID" />
<div class="form-group col-sm-4">
<label asp-for="#############" class="control-label col-sm-4"></label>
<input asp-for="#############" class="form-control col-sm-4" />
<span class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-dark" />
</div>
</form>
</div>
@foreach (var item in Model.PersonCompetences)
{
<div class="row py-2 rounded" style="background-color:lightslategray">
<div class="col-sm-3 pt-2">@item.Competence.CompetenceType</div>
<div class="col-sm-1 pt-2">@item.Niva</div>
<div class="col-sm-3 pt-2">@item.Competence.CompetenceCategory</div>
<div class="col-sm-5 d-flex justify-content-end">
<a class="btn btn-dark mr-1" role="button" asp-area="" asp-controller="Competence" asp-action="UpdateLevel" asp-route-id="@item.ID">Update</a>
<a class="btn btn-dark mr-1" role="button" asp-area="" asp-controller="Competence" asp-action="DeleteComp" asp-route-id="@item.CompetenceID">Remove</a>
</div>
</div>
}
简单的答案是我需要一个包含所有三个模型的 ViewModel
public class ExampleViewModel {
public Person person { get; set; }
public PersonCompetence personCompetence { get; set; }
public Competence competence { get; set; }}
这使我能够访问 ID、CompetenceType 和当前 PersonCompetence 的列表的不同值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.