Передача списка внутри ViewModel из View в контроллер в ASP.NET MVC - PullRequest
0 голосов
/ 11 января 2019

Я создаю приложение, которое бронирует гостей в гостиничных номерах. Я пытаюсь редактировать гостей в списке, который содержится в ReservationViewModel. В GET я успешно передаю ViewModel с двумя пустыми гостевыми элементами в View и создаю редакторы в View. Всякий раз, когда я отправляю обратно ReservationVM и пытаюсь прочитать их, список отображается пустым. Я изменил свой цикл foreach на цикл for, как это предлагалось, но, похоже, это не работает. Список кажется пустым, я пытаюсь напечатать сообщение всякий раз, когда оно пытается прочитать из списка, но ничего не выводится.

Вот мой 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(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;
            Debug.WriteLine(reservation.ID);
            //Update to DB and save changes
            resRepo.UpdateReservation(reservation);
            resRepo.Save();

            foreach(Guest guest in reservationVM.guests)
            {
                Debug.WriteLine("hello");
                guestRepo.UpdateGuest(guest);
                reservation.Guests.Add(guest);
            }
            guestRepo.Save();

            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(reservationVM);
    }

Вот мой взгляд: enter image description here

Редактирование: Передача списка из ViewModel из View в Controller в ASP.NET MVC?

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Я исправил это! Спасибо за помощь. Моей проблемой были привязки. Добавлено [Bind(Include ="date, amount_people,ID,room_ID,guests")] Кроме того, создание частичного представления для объекта «Гость», похоже, помогло связыванию.

0 голосов
/ 12 января 2019

Мне кажется, ваш код в порядке, возможно, вашему действию может понадобиться префикс

[HttpPost]
public ActionResult Edit2([Bind(Include = "guests")]DataReservationVM reservationVM)
{
.....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...