【发布时间】:2019-01-11 16:45:01
【问题描述】:
我正在创建一个应用程序来预订酒店客房的客人。在 HttpGet 中,我将 ReservationViewModel 从控制器传递到视图。这个虚拟机包含所有的预订细节和 2 个空的 Guest 对象(或者很多)。对于每个 Guest 对象,我展示了一个表单,用户需要在其中输入有关 Guest 的信息。但是,当我尝试提交时,它只会返回一位客人的信息。我已经尝试寻找一种方法来传递一个数组或多个客人,但这似乎是不可能的,只发送一个带参数的客人对象似乎可行..
这是我的 GET 代码:
[HttpGet]
public ActionResult Edit2(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Reservation reservation = resRepo.GetReservationByID(id);
ReservationVM reservationVM = new ReservationVM(0);
for (int i = 0; i < reservation.amount_people; i++)
{
reservationVM.guests.Add(new Guest());
}
foreach(Guest guest in reservationVM.guests)
{
guest.name = " ";
guest.zipcode = " ";
guest.housenumber = 0;
guest.suffix = "";
guest.email = " ";
guestRepo.AddGuest(guest);
}
guestRepo.Save();
reservationVM.date = (DateTime)reservation.date;
reservationVM.amount_people = (int)reservation.amount_people;
reservationVM.ID = reservation.ID;
reservationVM.room_ID = (int)reservation.room_ID;
if (reservation == null)
{
return HttpNotFound();
}
return View(reservationVM);
}
还有我的帖子:
[HttpPost]
public ActionResult Edit2([Bind(Include = "room_ID,date,amount_people,ID")]Reservation reservation, [Bind(Include = "ID,name,zipcode,housenumber,suffix,email")]Guest guest)
{
if (ModelState.IsValid)
{
resRepo.UpdateReservation(reservation);
resRepo.Save();
guestRepo.UpdateGuest(guest);
guestRepo.Save();
Reservation r = new Reservation { ID = reservation.ID };
db.Reservations.Add(r);
db.Reservations.Attach(r);
Guest g = new Guest { ID = guest.ID };
db.Guests.Add(g);
db.Guests.Attach(g);
r.Guests.Add(g);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(reservation);
}
还有我的填写表格:
现在我想知道如何将所有 forminfo 传递给我的 Controller 并使用该信息来保存 Reservation 和每个 Guest,以便我可以将其写入我的数据库。
谢谢!
编辑:我尝试了给出的解决方案,但我似乎无法在我的数据库中获取访客信息。问题似乎是,当它到达 foreach 循环以让客人离开 reservationVM 时,它是空的。每当它进入循环时尝试写入调试输出,但它永远不会。这是我的代码
[HttpPost]
public ActionResult Edit2(ReservationVM reservationVM)
{
if (ModelState.IsValid)
{
//Get reservation
Reservation reservation = resRepo.GetReservationByID(reservationVM.ID);
//Update values in model
reservation.date = reservationVM.date;
reservation.amount_people = reservationVM.amount_people;
reservation.ID = reservationVM.ID;
reservation.room_ID = reservationVM.room_ID;
//Update to DB and save changes
resRepo.UpdateReservation(reservation);
resRepo.Save();
foreach (Guest guest in reservationVM.guests)
{
Guest temp = guestRepo.GetGuestByID(guest.ID);
temp.name = guest.name;
temp.zipcode = guest.zipcode;
temp.housenumber = guest.housenumber;
temp.suffix = guest.suffix;
temp.email = guest.email;
temp.ID = guest.ID;
guestRepo.UpdateGuest(temp);
reservation.Guests.Add(temp);
}
guestRepo.Save();
//Reservation r = new Reservation { ID = reservation.ID };
//db.Reservations.Add(r);
//db.Reservations.Attach(r);
//Guest g = new Guest { ID = guest.ID };
//db.Guests.Add(g);
//db.Guests.Attach(g);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(reservationVM);
}
【问题讨论】:
-
欢迎来到 StackOverflow。我只是想说你在写第一个问题时做得很好——希望你能找到答案并享受社区!
-
@Luuk Pook,想看看你的观点!
-
是的,已发布!它在图片中
-
您错过了图片中视图的
using namespaces部分。包括using namespaces部分 -
我的错.. 已编辑。
标签: c# asp.net-mvc