如何将输入/文本框字段传递给控制器​​? ASP.NET MVC和实体框架

时间:2015-07-14 13:02:19

标签: c# jquery asp.net asp.net-mvc asp.net-mvc-4

我有一个Form和一个带有以下输入字段的简单模型:

public class Order
{
    public int Id { get; set; }
    public DateTime OrderDate { get; set; }
    public string Article { get; set; }
    public double Price { get; set; }
    public string Notice { get; set; }
}

我的表格看起来像这样

enter image description here

我可以捕获控制器上的值

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "OrderID,OrderDate,Article,Price,Notice")] Order order)
        {
            if (ModelState.IsValid)
            {
                db.Orders.Add(order);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(order);
        }

因此。我想用jQuery添加动态字段。这工作正常,但我不知道如何从多个输入字段中获取值。这就是我的问题。

所以我想为每个订单创建一个实体。 (如何在最后一张图片中)

请查看最后一张图片

enter image description here

这就是我想要的结果!我怎样才能在ASP.NET MVC C#中得到这个结果?我使用Entity Framework 6 谢谢你的帮助!

enter image description here

1 个答案:

答案 0 :(得分:1)

首先,您需要更改操作以接受List<Order>参数(或属性为List<Order>类型的强类型视图模型):

 [HttpGet]
 public ActionResult Create()
 {         
     var model = new List<Order>();
     return View(model);
 }

 [HttpPost]
 [ValidateAntiForgeryToken]
 public ActionResult Create(List<Order> orders)
 {
     // Update code omitted
     return View(order);
 }

然后在您的视图中添加模型声明:

@model List<Order>;

现在,您需要更正的部分是在HTML输入名称上动态添加Order个对象的命名,以保持模型绑定器的快乐。

在输入名称上创建第一个订单项时,应该是:

Name="[0].Id"
Name="[0].OrderDate"
Name="[0].Article"
Name="[0].Price"
Name="[0].Notice"

这将是第一个订单等等:

Name="[1].Id"
Name="[1].OrderDate"
Name="[1].Article"
Name="[1].Price"
Name="[1].Notice"

这篇文章非常值得一读:

Model Binding To A List