Отображение имени объекта вместо идентификатора в MVC - PullRequest
0 голосов
/ 03 ноября 2018

Подумайте, у меня есть такая модель:

public class Branch
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int ParentId { get; set; }
}

И пример данных:

Id ----- Имя ----- ParentId

01 ----- Родитель ----- 00

02 ----- Ребенок ------- 01

В представлении Index.html я показываю список элементов в этой таблице:

enter image description here

Так что, если я хочу показать имя родителя вместо ParentId? Я могу отделить модель Родителя от модели ребенка, но хочу, чтобы они были в одной таблице.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Попробовав несколько подходов, я решил использовать соединение, что-то вроде этого:

Как моя модель:

public class Branch
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? ParentId { get; set; }

    [NotMapped]
    public string ParentName { get; set; }
}

Как мой контроллер:

        public ActionResult Index()
    {
        var branches = db.Branches;
        var query = from child in branches
            join parent in branches on child.ParentId equals parent.Id into parentJoin
            select new 
            {
                Id = child.Id,
                ParentId = child.ParentId,
                Name = child.Name,
                ParentName = parentJoin.FirstOrDefault().Name
            };
        var result = query.ToList().Select(e => new Branch
        {
            Id = e.Id,
            ParentId = e.ParentId,
            Name = e.Name,
            ParentName = e.ParentName
        }).ToList();
        return View(result);
    }

и как мой вид:

@model List<Rouyesh_Database.Models.Branch>
@foreach (var item in Model) {
if (item.ParentId == null)
{
    <tr>
    <td>
        @Html.DisplayFor(modelItem => item.Name)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.ParentName)
    </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
        @Html.ActionLink("Details", "Details", new { id=item.Id }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.Id })
    </td>
</tr>
}

}

0 голосов
/ 03 ноября 2018

Возможно, вы решите использовать ViewModel для решения этой ситуации.

public class BranchVM : Branch
{
    // because it extends Branch it has Id, Name, and ParentId
    public string ParentName {get;set;}
}

Получите поля в вашей бизнес-логике, затем передайте эту модель представления в представление, которое принимает BranchVM в качестве своей Модели и вуаля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...