簡體   English   中英

ASP.NET MVC EF Core,在為不同模型選擇 ID 時在視圖中訪問屬性

[英]ASP.NET MVC EF Core, Property Access in View while on selected ID for different Model

我有一個問題,我有三個模型,如下所示: PersonCompetencePersonCompetence之間。 我當前的控制器方法從上一頁獲取 Id 並顯示此人的CompetenceLevel列表。 但是,在此視圖中,我想為新的Competence一個POST 因此,同時您正在添加一個新的,並且您可以看到您已經擁有哪些。

使用我現在擁有的控制器方法,我可以在顯示列表時訪問PersonCompetenceCompetence 我無權訪問在AddComp視圖中標記為 ###### 的asp-for="Competence"Competence屬性。

  • 我需要將人的ID POST給正確的人
  • 我需要用於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 的列表的不同值。

MVC 中的 ViewModel 是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM