【发布时间】:2016-01-19 03:53:57
【问题描述】:
我得到了错误:
System.Collections.Generic.HashSet`1[CTCSAgenda.Models.Evenement]
当我尝试在视图中列出我的 Icollection 时的消息。
这是我的模范人物:
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
}
}
我的模特晚会:
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>
我是初学者,所以可能会有一些错误,但一切都很好,除了来自事件的人员列表。我收到了 HashSet 的消息,但我不知道列出我的 Personnes 的热度...
【问题讨论】:
-
这还不是全部错误。显示完整的错误文本和相关的源代码行。
-
这就是我在浏览器上显示人员列表的全部内容。
-
这不是错误,是视图隐式调用了您的 HashSet 对象上的
ToString()。 -
在您显示的代码中没有打印 HashSet 的代码。
-
@CodeCaster 但是有
ICollection可以存储HashSet。
标签: c# asp.net-mvc mvvm