Отображение имени объекта вместо идентификатора в MVC

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

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 я показываю список элементов в этой таблице:

Отображение имени объекта вместо идентификатора в MVC

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

Я думаю, вам нужно связать две таблицы классов.

Llazar 03.11.2018 21:22

@Llazar, это всего лишь один класс.

amirdaraee 03.11.2018 21:23

Тогда какое имя родителя?

Llazar 03.11.2018 21:27

Добавьте свойство Parent типа Branch и используйте его свойство Name.

Shyju 04.11.2018 01:22

Как выглядит ваш взгляд?

Matt Oestreich 04.11.2018 06:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
5
2 112
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

Ответ принят как подходящий

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

В качестве моей модели:

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

}

Другие вопросы по теме