Представьте, что у меня есть такая модель:
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 я показываю список элементов в этой таблице:
Так что, если я хочу показать имя родителя вместо ParentId? Я могу отделить родительскую модель от дочерней, но я хочу, чтобы они находились в одной таблице.
@Llazar, это всего лишь один класс.
Тогда какое имя родителя?
Добавьте свойство Parent типа Branch и используйте его свойство Name.
Как выглядит ваш взгляд?





Вы можете рассмотреть возможность использования 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>
}
}
Я думаю, вам нужно связать две таблицы классов.