生成列表视图中,并传递给控制器(Generate list in view and pass it

2019-08-18 13:54发布

我正在写一个酒店预订网站,与Asp.net和MVC 4.它有一个类名为保留其中有一个联系人列表。 在创建视图我想动态创建联系人。 (的接触=成人+孩子和将在被确定的数目创建预订视图)如何可以张贴的联系信息提供给控制器?

public partial class Reservation
{
    public int Id { get; set; }
    public int RoomType_Id { get; set; }
    public System.DateTime FromDate { get; set; }
    public System.DateTime ToDate { get; set; }
    public byte Adults { get; set; }
    public byte Kids { get; set; }
    public decimal Price { get; set; }
    public int User_Id { get; set; }
    public int State_Id { get; set; }
    public virtual ReservationState ReservationState { get; set; }
    public virtual RoomType RoomType { get; set; }
    public virtual User User { get; set; }
    public virtual ICollection<Transaction> Transactions { get; set; }
    public virtual ICollection<Contact> Contacts { get; set; }
}

我应该设置联系人(例如5的最大数量,然后写这样的事情?

    [HttpPost]
    public ActionResult Create(Reservation reservation,Contact Adult1,Contact Adult2, Contact Adult3, Contact Adult4, Contact Adult5, Contact Kid1,Contact Kid2, Contact Kid3)
    {
        if(reservation.Adults>0)
            reservation.Contacts.Add(Adult1);
        if(reservation.Adults>1)
            reservation.Contacts.Add(Adult2);
        ...
        if (ModelState.IsValid)
        {
            _db.Reservations.Add(reservation);
            _db.SaveChanges();
            return RedirectToAction("Index");
        }
    }

这是非常脏的是有没有更好的办法? 我可以通过联系人列表?

Answer 1:

@for (var i = 0; i < Model.Contacts.Count(); i++)
{
    @Html.EditorFor(m => m.Contacts[i])
}

你需要做的唯一的事情就是实例化的新的联系人列表。 这就是为什么一个视图模型是优选的,因为你可以简单地这样做是基于对您的视图模型的一些值的构造方法:

public class ReservationViewModel
{
    public ReservationViewModel()
    {
        Contacts = new List<Contact>();
        for (var i = 0; i < Adults + Kids; i++)
        {
            Contacts.Add(new Contact());
        }
    }

    ...
}

或者,在你看到获取生成你就会明白了ModelBinder的期望如何接收数据返回的代码。 您的投入将是这样的:

<input id="Contacts_0__Name" name="Contacts[0].Name" />

其中0是接触的迭代次数。 如果你手动模拟这种结构,ModelBinder的会拿起数据一样好。



文章来源: Generate list in view and pass it to controller