2015-04-28 3 views
-1

У меня есть функция 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 полях вместо двух?

+2

ролей и навыков, имеющие нескольких объектов, как вы можете использовать 'model.Skills.SkillName'? Я полагаю, что у каждого навыка должно быть другое SkillName, верно? –

+0

Используйте List вместо Icollection. – Aizen

ответ

1

В списке использования моделей для ролей и навыков.

public virtual List<Role> Roles { get; set; } 
public virtual List<Skill> Skills { get; set; } 

В видовой итерации по списку к каждому значению из этих списков, как показано ниже

<th> 
@foreach(var r in model.Roles) 
{ 
<p> 
    @Html.DisplayNameFor(r.RoleTitle) 
</p> 
} 
</th> 
<th> 
@foreach(var s in model.Skills) 
{ 
<p> 
    @Html.DisplayNameFor(r.RoleTitle) 
</p> 
} 

</th> 
+2

Вам не нужен список для итерации ... – Shoe

+0

нет, но я предпочитаю список, перечисляемый не работает когда-то в просмотрах –

+1

Не работает как? Список, набранный в функции Ienumerable, точно такой же, как и в списке, без учета некоторых методов, к которым у вас есть доступ. – Shoe

Смежные вопросы