2015-10-20 35 views
-4

我得到了錯誤:ICollection的視圖中的ASP.NET

System.Collections.Generic.HashSet`1[CTCSAgenda.Models.Evenement] 

消息時,我嘗試列出我的ICollection在視圖中。

這裏是我的模型Personne:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Linq; 
using System.Web; 

namespace CTCSAgenda.Models 
{ 
    // Classe Personne ayant une relation Many to Many avec la Classe Evenement, ce qui permet de générer une table intermédiaire Personne/Evenement lors de la génération des tables. 
    // Etant donnée qu'une Personne peut s'inscrire à plusieurs Evenements et plusieurs Personnes peuvent s'inscrire à un même Evenement. 
    // Il y a également une relation One to Many entre Personne et StatutPersonne 
    // En effet, le statut est unique pour une Personne distincte et un statut peut être porté par plusieurs Personnes 
    [Table("PERSONNE")] 
    public class Personne 
    { 
     #region Properties nolink 
     // Propriétés de la classe User 
     [Key] 
     [Column("ID_PERSONNE")] 
     //[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int IdPersonne { get; set; } 
     //[Required] 
     [Column("NOM_PERSONNE")] 
     [MaxLength(255)] 
     public string NomPersonne { get; set; } 
     [Column("PRENOM_PERSONNE")] 
     [MaxLength(255)] 
     public string PrenomPersonne { get; set; } 
     [Column("LOGIN_PERSONNE")] 
     [MaxLength(128)] 
     [Display(Name = "Nom d’utilisateur: ")] 
     public string LoginPersonne { get; set; } 
#endregion 
     #region Properties link 
     // Lien Many to Many avec Evenement (Une personne peut s'inscrire à plusieurs Evenements) 
     [Column("ID_EVENEMENT")] 
     [ForeignKey("IdEvenement")] 
     public virtual ICollection<Evenement> Evenements { get; set; } 
     // Lien One to Many avec Statut (Une personne a 1 et 1 seul statut) 
     [Column("ID_STATUT_PERSONNE")] 
     public int IdStatutPersonne { get; set; } 
     [ForeignKey("IdStatutPersonne")] 
     public virtual StatutPersonne statutsPersonne { get; set; } 
     #endregion 
    } 
} 

我的模型Evenement:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Linq; 
using System.Web; 

namespace CTCSAgenda.Models 
{ 
    [Table("EVENEMENT")] 
    public class Evenement 
    { 
     #region Properties nolink 
     [Key] 
     [Column("ID_EVENEMENT")] 
     //[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int IdEvenement { get; set; } 
     [Column("TITRE_EVENEMENT")] 
     [Required] 
     [Display(Name = "Titre: ")] 
     public string TitreEvenement { get; set; } 
     [Column("DATE_EVENEMENT")] 
     [Required] 
     [Display(Name = "Date: ")] 
     // Pour afficher uniquement la date sans l'heure 
     [DataType(DataType.Date)] 
     public DateTime DateEvenement { get; set; } 
     [Column("HEURE_EVENEMENT")] 
     [Required] 
     [Display(Name = "Heure: ")] 
     [DataType(DataType.Time)] 
     [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "hh:mm tt")] 
     public DateTime HeureEvenement { get; set; } 
     [Column("CAPACITE_EVENEMENT")] 
     [Display(Name = "Capacité: ")] 
     [Range(0,1000)] 
     public int Capacite { get; set; } 
     [Column("DESCRIPTION_EVENEMENT")] 
     [Display(Name = "Description: ")] 
     public string Description { get; set; } 
     //[DefaultValue(0)] 
     //[Range(0,1)] 
     [DefaultValue(false)] 
     [Column("IS_CANCELED")] 
     [Display(Name = "Annulation: ")] 
     public bool IsCanceled { get; set; } 
#endregion 
     #region Properties link 
     // Lien Many to Many avec Personne 
     [Column("ID_PERSONNE")] 
     [ForeignKey("IdPersonne")] 
     [Display(Name = "Participants: ")] 
     public virtual ICollection<Personne> Personnes { get; set; } 
     // Lien One to Many avec Lieu 
     // Foreign Key pour Lieu 
     [Column("ID_EVENEMENT_LIEU")] 
     public int IdEvenementLieu { get; set; } 
     [ForeignKey("IdEvenementLieu")] 
     public virtual Lieu lieux { get; set; } 
     // Lien One to Many avec CategorieEvenement 
     // Foreign Key pour Categorie 
     [Column("ID_EVENEMENT_CATEGORIE")] 
     public int IdEvenementCategorie { get; set; } 
     [ForeignKey("IdEvenementCategorie")] 
     public virtual CategorieEvenement categoriesEvenement { get; set; } 
#endregion 
    } 
} 

我的視圖模型:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using CTCSAgenda.Models; 

namespace CTCSAgenda.ViewModels 
{ 
    public class MesEvenementsViewModel 
    { 
     public Personne Personne { get; set; } 
     public virtual ICollection<Evenement> MesEvenements { get; set; } 
    } 
} 

這裏是我的控制器:

public ActionResult MyEvents() 
{ 
    var mesEvenementsViewModel = new MesEvenementsViewModel(); 
    Personne personne = (Personne)Session["User"]; 
    Personne dbPersonne = db.Personnes.Find(personne.IdPersonne); 
    Personne personneVM = db.Personnes.Include(e => e.Evenements).First(e => e.IdPersonne == personne.IdPersonne); 
    mesEvenementsViewModel.Personne = personneVM; 
    mesEvenementsViewModel.MesEvenements = personneVM.Evenements; 
    return View(mesEvenementsViewModel); 
} 

最後我的看法:

@model CTCSAgenda.ViewModels.MesEvenementsViewModel 
@{ 
    ViewBag.Title = "MyEvents"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Les évènements auxquels je suis inscrit: </h2> 

    @Html.DisplayNameFor(model => model.MesEvenements) 
<br /> 


     <table> 
      <tr> 
       @foreach (var item in Model.MesEvenements) 
       { 
        <td>@Html.DisplayFor(model => item.TitreEvenement)</td> 
        <td>@Html.DisplayFor(model => item.DateEvenement)</td> 
        <td>@Html.DisplayFor(model => item.HeureEvenement.TimeOfDay)</td> 
        <td>@Html.DisplayFor(model => item.Description)</td> 
        <td>@Html.DisplayTextFor(model => item.Personnes)</td> 

       } 
      </tr> 
</table> 

我是初學者所以有可能是一些錯誤,但一切都很好,除了Personnes從一個事件清單。我收到了HashSet的消息,並且我不知道我的個人名單很熱...

+0

這不是整個錯誤。顯示完整的錯誤文本和相關的源代碼行。 – CodeCaster

+0

這就是我在瀏覽器上顯示Personnes列表時的全部內容。 – Xr4y

+1

這不是一個錯誤,它是隱式調用HashSet對象上的'ToString()'的視圖。 – DavidG

回答

0

也許您的Evenements集合在您將其分配給虛擬機時尚未枚舉。 嘗試在所述控制器執行以下操作:

mesEvenementsViewModel.MesEvenements = personneVM.Evenements.ToArray()

+0

我試過但我得到了相同的結果 – Xr4y

+0

是的,這可能不是問題。嘗試在ViewModel的MesEvenements中添加一個[DisplayName(「...」)]屬性。我認爲你看到的不是錯誤,而是DisplayNameFor(m => m.MesEvenements)的結果。 –

+0

如果我添加'​​@ Html.DisplayNameFor(model => item.Personnes)'我得到參與者:'System.Collections.Generic.HashSet'1 [CTCSAgenda.Models.Evenement]' – Xr4y