【问题标题】:ASP.NET MVC EF Core, Property Access in View while on selected ID for different ModelASP.NET MVC EF Core,视图中的属性访问,同时在不同模型的选定 ID 上
【发布时间】:2020-12-29 15:44:04
【问题描述】:

我遇到了一个问题,我有三个模型,如下所示:Person、Competence 和它们之间的 PersonCompetence。我当前的控制器方法从上一页获取一个 ID,并显示该人的列表,其中包含此人的 Competence 和 Level。但是,在此视图中,我希望为新的Competence 提供 POST。因此,在您添加一个新的同时,您可以看到您已经拥有哪些。

使用我现在拥有的控制器方法,我可以在显示列表时访问PersonCompetence 和Competence。 我无权访问asp-for="Competence" 的Competence 属性,在AddComp 的视图中标记为######。

  • 我需要人的ID POST 到正确的人
  • 我需要 CompetenceType 用于 POST 到该属性
  • 我需要PersonCompetence 来显示当前PersonCompetence 的列表。

我通过当前的@model CompetenceRadar.Models.Person 得到了这一点,我只能访问 Person 属性。

我查看了一个 ViewModel 可以访问所有表,每个表都有一个 IEnumerable,但是当我搜索显示人员的 ID 时,这会破坏我当前的控制器。我已经在视图中切换了@model,但是我无法访问个人 ID/姓名。

那么我如何访问Competence 属性,列出一个人并获取该人的PersonCompetences 列表。

如果你想让我澄清一些事情,请告诉我。 我不需要工作代码,只需要为我指明解决方案的正确方向即可。

  • 它是 ViewModel 吗?
  • 我可以在没有asp-forattribute 的情况下发帖吗?

模型

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>
}

【问题讨论】:

  • 欢迎来到 StackOverflow。如果我可以提出个人建议:您应该考虑在代码中坚持使用英语。这基本上是国际上的最佳做法。
  • 是的,很好的建议。我现在就改变它。谢谢

标签: c# asp.net-mvc entity-framework-core


【解决方案1】:

简单的答案是我需要一个包含所有三个模型的 ViewModel

public class ExampleViewModel {

    public Person person { get; set; }
    public PersonCompetence personCompetence { get; set; }
    public Competence competence { get; set; }}

这让我可以访问当前 PersonCompetence 的 ID、CompetenceType 和 List 的不同值。

What is ViewModel in MVC?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多