У меня есть функция Create and Edit View, чтобы использовать поля Pull Down для ввода данных из реляционных таблиц. У меня есть соединение от 1 до многих и от нескольких до 1 ссылок из таблицы Critvit, и они не могут заставить их работать вместе в представлении индексов.Индекс Просмотр конфликта между ICollection и IEnumerable
Critvit Модель
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace NextRung.Models
{
public class Critvit
{
public Int32 CritvitId { get; set; }
public Int32 RoleId { get; set; }
public decimal? Salary { get; set; }
public decimal RoleExp { get; set; }
public Int32 SkillId { get; set; }
[DataType(DataType.Date)]
public DateTime? StartDate { get; set; }
[DataType(DataType.Date)]
public DateTime? EndDate { get; set; }
[DataType(DataType.DateTime)]
public DateTime? CreateDate { get; set; }
public string Summary { get; set; }
public Int32 CompanyId { get; set; }
// AuditInfo
public Int32 UserId { get; set; }
[DataType(DataType.DateTime)]
public DateTime? CreatedDate { get; set; }
[DataType(DataType.DateTime)]
public DateTime? EditedDate { get; set; }
[DataType(DataType.DateTime)]
public DateTime? DeletedDate { get; set; }
public virtual ICollection<Role> Roles { get; set; }
public virtual ICollection<Skill> Skills { get; set; }
public virtual User Users { get; set; }
public virtual Company Companies { get; set; }
}
}
Index Просмотр
@model ICollection<NextRung.Models.Critvit>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Companies.CompanyName)
</th>
<th>
@Html.DisplayNameFor(model => model.Users.Email)
</th>
<th>
@Html.DisplayNameFor(model => model.Roles.RoleTitle)
</th>
<th>
@Html.DisplayNameFor(model => model.Salary)
</th>
<th>
@Html.DisplayNameFor(model => model.RoleExp)
</th>
<th>
@Html.DisplayNameFor(model => model.Skills.SkillName)
</th>
<th>
@Html.DisplayNameFor(model => model.StartDate)
</th>
<th>
@Html.DisplayNameFor(model => model.EndDate)
</th>
<th>
@Html.DisplayNameFor(model => model.Summary)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Companies.CompanyName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Users.Email)
</td>
<td>
@Html.DisplayFor(modelItem => item.Roles.RoleTitle)
</td>
<td>
@Html.DisplayFor(modelItem => item.Salary)
</td>
<td>
@Html.DisplayFor(modelItem => item.RoleExp)
</td>
<td>
@Html.DisplayFor(modelItem => item.Skills.SkillName)
</td>
<td>
@Html.DisplayFor(modelItem => item.StartDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.EndDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Summary)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.CritvitId }) |
@Html.ActionLink("Details", "Details", new { id=item.CritvitId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.CritvitId })
</td>
</tr>
}
</table>
Этот код появляется, чтобы поля RoleTitle и SkillName работать, но не почта или НазваниеКомпании.
я могу переключить @model ICollection<NextRung.Models.Critvit>
с @model IEnumerable<NextRung.Models.Critvit>
Если я использую и SkillId Идентификатор роли, IEnumerable работает нормально, но это не то, что мне нужно. Каждое решение, которое я пробовал до сих пор, работает только для некоторых полей. Итак, как я могу получить представление индекса для отображения реляционных данных во всех 4 полях вместо двух?
ролей и навыков, имеющие нескольких объектов, как вы можете использовать 'model.Skills.SkillName'? Я полагаю, что у каждого навыка должно быть другое SkillName, верно? –
Используйте List вместо Icollection. – Aizen