在视图中显示Viewmodel

猪肉

因此,我有一个名为Reports的视图模型类,如下所示:

    public class MemberReports
    {
        public Member Members { get; set; }
        public Event Events { get; set; }
        public MemberClubHours Memberclubhours { get; set; }
        public VolunteerEvents Volunteerevents { get; set; }
    }

它包含成员,该成员与事件,MemberClubHours和志愿者事件具有多对多关系。基本上,我想在称为报告的视图中显示成员上的所有数据。但是我很难做到这一点,有什么建议吗?这是所有的类:

    public class Member
    {
        public int Id { get; set; }
        [Required]
        [MaxLength(4, ErrorMessage = "PIN must be 4 numbers long"), MinLength(4, ErrorMessage = "PIN must be 4 numbers long")]
        public string PIN { get; set; }
        [Required]
        [Display(Name ="First Name")]
        public string FirstName { get; set; }
        [Required]
        [Display(Name = "Last Name")]
        public string LastName { get; set; }
        [Display(Name = "Date of Birth")]
        public DateTime? Birthdate { get; set; }
        public virtual ICollection<Event> Events { get; set; }
        public virtual ICollection<VolunteerEvents> Vevents { get; set; }
        public virtual ICollection<MemberClubHours> Hours { get; } = new HashSet<MemberClubHours>();
    }
public class Event
{

    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    [Display(Name = "Date")]
    public DateTime? EventDate { get; set; }
    [Required]
    [Display(Name = "Start Time")]
    public TimeSpan EventStartTime { get; set; }
    [Required]
    [Display(Name = "End Time")]
    public TimeSpan EventEndTime { get; set; }
    public int EventTotalTime{ get; set; }
    public virtual ICollection<Member> Members { get; set; }


}

    public class MemberClubHours
    {
        public int Id { get; set; }
        public DateTime? ClockIn { get; set; }
        public DateTime? ClockOut { get; set; }
        [Required]
        public Member Member { get; set; }
    }
public class VolunteerEvents
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    [Display( Name ="Date")]
    public DateTime? VEventDate { get; set; }
    [Required]
    [Display(Name = "Start Time")]
    public TimeSpan VEventStartTime { get; set; }
    [Required]
    [Display(Name = "End Time")]
    public TimeSpan VEventEndTime { get; set; }
    public int VEventTotalTime { get; set; }
    public virtual ICollection<Member> Members { get; set; }
}

这是控制器,我有点困惑,我应该遍历这些类以获取要存储在viewmodel中的信息吗?

         public ActionResult Reports()//reports page
        {
            var Data = new MemberReports()
            {


            };

            return View(Data);
        }

最后是这里的视图:


@model IEnumerable<ClubChallenge.ViewModels.MemberReports>
@{

                ViewBag.Title = "Reports";
}

<table>

    @foreach (var data in Model)
    {
        <tr>
            <td></td>
        </tr>
    }




</table>
杰丁·贤哲

在所有这些导航属性中,您似乎都已分配了virtual关键字。virtual实体框架中关键字指示该相关实体将被延迟加载或自动加载而无需查询。

public class Member
{
    ...
    public virtual ICollection<Event> Events { get; set; }
    public virtual ICollection<VolunteerEvents> Vevents { get; set; }
    public virtual ICollection<MemberClubHours> Hours { get; } = new HashSet<MemberClubHours>();
}

毕竟您可能不需要MemberReports,因为导航属性是自动加载的,因此您只需搜索成员并将其返回到视图即可。尝试这个;

public ActionResult Reports()
{
   // If your navigation properties doesn't have the virtual keyword, you need to write your query like this;
   // var member = context.Members.Include(m=>m.Events).Include(m=>m.Vevents).Include(m=>m.Hours).ToList();

   // but since, you put virtual, you could just do this;
   // all the other navigation properties are automatically loaded
   var members = context.Members.ToList();

   // you could immediately access them like this

   // get the first member
   Console.WriteLine(members.FirstOrDefault().Events.Count);
   Console.WriteLine(members.FirstOrDefault().Events.FirstOrDefault().Name);

   Console.WriteLine(members.FirstOrDefault().Vevents.Count);
   Console.WriteLine(members.FirstOrDefault().Vevents.FirstOrDefault().Name);

   Console.WriteLine(members.FirstOrDefault().Hours.Count);
   Console.WriteLine(members.FirstOrDefault().Hours.ClockIn.ToString());

   return View(member);
}

然后,在您的视图中,您可以进行嵌套循环。首先循环遍历成员,然后在内部循环遍历导航的属性;

@model IEnumerable<ClubChallenge.Members>
@{
    ViewBag.Title = "Reports";
}

<table>

    @foreach (var data in Model)
    {
        <tr>
            <td>
               @foreach(var event in data.Events){
                  <text>@event.Name ,</text>
               }
            </td>
            <td>
               @foreach(var vevent in data.Vevents){
                  <text>@vevent.Name ,</text>
               }
            </td>
            <td>
               @foreach(var hour in data.Hours){
                  <text>@hour.ClockIn.ToString() ,</text>
               }
            </td>
        </tr>
    }
</table>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用viewmodel在视图中显示图像

来自分类Dev

C#MVC在剃刀视图中显示来自ViewModel的图像

来自分类Dev

在视图中显示Json

来自分类Dev

在视图中显示Json

来自分类Dev

在视图中显示 ICollection

来自分类Dev

在ViewModel中添加多个值并在视图中显示它们

来自分类Dev

如何使用ViewModel从多个表中检索数据并在视图中显示

来自分类Dev

如何使用ViewModel从多个表中检索数据并在视图中显示

来自分类Dev

没有在视图中填充MVC ViewModel

来自分类Dev

如何使用AJAX更新视图中的ViewModel?

来自分类Dev

视图中的Aceess extjs ViewModel存储

来自分类Dev

如何在视图中访问 ViewModel 的属性

来自分类Dev

同一视图中的多个 ViewModel

来自分类Dev

显示网格视图中的行数

来自分类Dev

在Vaadin视图中显示PDF

来自分类Dev

在堆栈视图中显示图像

来自分类Dev

在相机视图中显示UIView

来自分类Dev

在asp视图中显示图像

来自分类Dev

显示视图中的星期几

来自分类Dev

在Rails视图中显示日期

来自分类Dev

在列表视图中显示图像

来自分类Dev

日期显示在Drupal视图中

来自分类Dev

在表格视图中显示文本

来自分类Dev

UIBarButtonItem未在视图中显示

来自分类Dev

在视图中显示搜索结果

来自分类Dev

无法在视图中显示结果

来自分类Dev

UITextField 未显示在视图中

来自分类Dev

在视图中显示 IEnumerable<dynamic>

来自分类Dev

UILabel 未显示在视图中