C# 将视图模型传递给视图,将文本框中的数据保存到视图模型中,然后将该数据从视图模型传输到“我的模型”

C# 将视图模型传递给视图,将文本框中的数据保存到视图模型中,然后将该数据从视图模型传输到“我的模型”,c#,asp.net-mvc,entity-framework,model-view-controller,ef-code-first,C#,Asp.net Mvc,Entity Framework,Model View Controller,Ef Code First,我不知道我这样做是否正确,但基本上我正在为一个俱乐部创建一个MVC应用程序,我有一个会员类和一个活动类。我有一个显示以下所有事件的视图 @model IEnumerable<Application.Models.Event> @{ Layout = null; } <h1>Events For this Month!</h1> <table> @foreach (var events in Model) {

我不知道我这样做是否正确,但基本上我正在为一个俱乐部创建一个MVC应用程序,我有一个会员类和一个活动类。我有一个显示以下所有事件的视图

@model IEnumerable<Application.Models.Event>
@{
    Layout = null;
}

<h1>Events For this Month!</h1>
<table>


    @foreach (var events in Model)

    {

        <tr>
            <td><h2>@events.Name</h2></td>

            <td>
                @Html.ActionLink("Sign-Up", "SignUpEvent", "User", new { id = events.Id }, null)
            </td>
        </tr>


    }

</table>

返回的视图是成员输入其pin的位置


@model Application.ViewModels.MemberEventViewModel
@{
    Layout = null;
}


<h2>Sign-Up</h2>

@using (Html.BeginForm("SignUp", "User")) 
{
    @Html.LabelFor(c => c.Member.PIN)
    @Html.TextBoxFor(c => c.Member.PIN)


    @Html.HiddenFor(c => c.Events.Id)

    <button type="submit">Save</button>
}

我不知道该如何让它工作。我想查看会员注册的活动,反之亦然。在我创建事件和成员之间的多对多关系时,创建了一个名为MemberEvents的桥接表

这里还有我的视图模型类

    public class MemberEventViewModel
    {
        public Member Member { get; set; }
        public Event Events { get; set; }


    }
这是活动课

    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; }


    }
公共类事件
{
公共int Id{get;set;}
[必需]
公共字符串名称{get;set;}
[必需]
[显示(Name=“日期”)]
公共日期时间?事件日期{get;set;}
[必需]
[显示(Name=“开始时间”)]
公共时间跨度EventStartTime{get;set;}
[必需]
[显示(Name=“结束时间”)]
公共TimeSpan EventEndTime{get;set;}
public int EventTotalTime{get;set;}
公共虚拟ICollection成员{get;set;}
}
和成员类


    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; }

    }

公共班级成员
{
公共int Id{get;set;}
[必需]
[MaxLength(4,ErrorMessage=“PIN必须有4个数字长”)、MinLength(4,ErrorMessage=“PIN必须有4个数字长”)]
公共字符串PIN{get;set;}
[必需]
[显示(Name=“First Name”)]
公共字符串名{get;set;}
[必需]
[显示(Name=“Last Name”)]
公共字符串LastName{get;set;}
[显示(姓名=“出生日期”)]
公共日期时间?生日{get;set;}
公共虚拟ICollection事件{get;set;}
}

看起来您添加它的方式没有问题,但我认为您在添加MemberEvents对象后错过了
context.SaveChanges()

[HttpPost]
public ActionResult SignUp(MemberEventViewModel Vmodel) 
{
   var EventinDB = _context.Events.SingleOrDefault(c => c.Id == Vmodel.Events.Id);
   var MemberinDB = _context.Members.SingleOrDefault(c => c.PIN == Vmodel.Member.PIN);

   // try using one only
   MemberinDB.Events.Add(EventinDB);
   // EventinDB.Members.Add(MemberinDB);

   // you should save here   
   _context.SaveChanges();

   return View("ViewEvents", "User");
}
还要确保在此处指定属性

public ActionResult SignUpEvent(int id)
{
   var Vmodel = new MemberEventViewModel() 
   {
      Member = // find the member _context.Members.Where(...)
      Events = _context.Events.FirstOrDefault(e=>e.Id == id)
   };
   return View(Vmodel);
}

看起来您添加它的方式没有问题,但我认为您在添加MemberEvents对象后错过了
context.SaveChanges()

[HttpPost]
public ActionResult SignUp(MemberEventViewModel Vmodel) 
{
   var EventinDB = _context.Events.SingleOrDefault(c => c.Id == Vmodel.Events.Id);
   var MemberinDB = _context.Members.SingleOrDefault(c => c.PIN == Vmodel.Member.PIN);

   // try using one only
   MemberinDB.Events.Add(EventinDB);
   // EventinDB.Members.Add(MemberinDB);

   // you should save here   
   _context.SaveChanges();

   return View("ViewEvents", "User");
}
还要确保在此处指定属性

public ActionResult SignUpEvent(int id)
{
   var Vmodel = new MemberEventViewModel() 
   {
      Member = // find the member _context.Members.Where(...)
      Events = _context.Events.FirstOrDefault(e=>e.Id == id)
   };
   return View(Vmodel);
}

您好,您会包括MemberEventViewModel类及其属性吗?谢谢,我能做到哦,也请参加活动课!谢谢为了澄清,是否要在提交后保存到MemberEvents表?你在注册帖子上得到值了吗?哦,MemberEvents还没有在数据库中?你是先使用代码吗?所以基本上我有一个事件类,有一个成员集合,然后我有一个成员类,有一个事件集合。我希望能够看到一个成员注册了哪些活动,以及哪些成员注册了特定活动。我可以将事件ID传递给signupevent视图,但之后会得到空值。是的,我使用的是code firstHi,您会包括MemberEventViewModel类及其属性吗?谢谢,我能做到哦,也请参加活动课!谢谢为了澄清,是否要在提交后保存到MemberEvents表?你在注册帖子上得到值了吗?哦,MemberEvents还没有在数据库中?你是先使用代码吗?所以基本上我有一个事件类,有一个成员集合,然后我有一个成员类,有一个事件集合。我希望能够看到一个成员注册了哪些活动,以及哪些成员注册了特定活动。我可以将事件ID传递给signupevent视图,但之后会得到空值。是的,我先用代码