asp.net-mvc - 在 View 中生成列表并将其传递给 Controller

标签 asp.net-mvc model-view-controller asp.net-mvc-4

我正在使用 Asp.net 和 MVC 4 编写一个酒店预订网站。 它有一个名为“reservation”的类,其中有一个联系人列表。在创建 View 中我想动态创建联系人。 (联系人数量=成人+ child ,将在创建预订 View 中确定) 我如何向 Controller 发布联系信息?

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

太脏了,有更好的方法吗?我可以传递联系人列表吗?

最佳答案

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

您唯一需要做的就是实例化新联系人列表。这就是为什么 View 模型更可取,因为您可以根据 View 模型上的某些值在构造函数中简单地执行此操作:

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

    ...
}

或者,在看到生成的代码后,您将了解模型绑定(bind)程序期望如何接收返回的数据。您的输入将如下所示:

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

其中0是联系人的迭代计数。如果您手动模拟此结构,模型绑定(bind)器也将获取数据。

关于asp.net-mvc - 在 View 中生成列表并将其传递给 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15742868/

相关文章:

javascript - 过滤仅文本文件的文件上传

asp.net - 发现了多种与名为 'Home'的 Controller 匹配的类型。 (两个区域,相同的 Controller 名称)

c# - ASP.NET MVC : code:-32000 message: No script for id: 32

c# - 自定义模型 Binder 不触发

c# - WebActivator.PreApplicationStartMethod 不起作用

c# - 编辑时未选择 MVC 级联下拉列表

asp.net-mvc - 用于处理 UI、验证和异常管理的 angular js

java - 设置简单的struts 1.3项目,在ant范围内找不到bean

javascript - Emberjs - 将参数动态绑定(bind)到 View

javascript - MVC @Html.TextAreaFor 验证不工作