MVC.Net结合复杂的模型?(MVC.Net binding complex models?)

2019-08-17 10:50发布

我有以下代码,与现有的客户。 我需要创建创建一个订单形式,并将其传递给我的控制器。

我试图改变该网页上我的模型类型订单,而不是客户,但后来我会必须通过Order对象为好,或至少将订单。

楷模

public class Customer
{
   public int Id { set; get; }
   public string FirstName { set; get; }
   public string LastName { set; get; }
   public List<Order> Orders { get; set;}
}

public class Order
{
   public int Id { set; get; }
   public string ItemName { set; get; }
   public DateTime SomeDate { set; get; }
}

调节器

public class OrderController : Controller
{
   [HttpPost]
   public Create ActionResult(Customer customer)
   {
      // Customer doesn't have the values that it suppose to have
      // All fields including the array of orders are null
      customerStorage.UpdateOrders(customer);

      return ("ItemListPartial", customer.orders);
   }
}

视图

@model Company.Application.Model.Customer;

@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "result" }))
{
    // How can I bind this to Order object ?
    // I can't define model as Order, because then I need to pass Customer Separately
    @Html.TextBoxFor(o => o.Orders[0].ItemName)
    @Html.TextBoxFor(o => o.Orders[0].SomeDate)
    <input type="submit" value="Add" />
}

Answer 1:

我想你在寻找什么这个博客文章介绍: ASP.NET MVC线格式模型绑定到数组,列表,集合,字典

从博客引用:

如果签名是这样的:

 public ActionResult Blah(IDictionary<string, Company> stocks) { // ... } 

我们给出这样的HTML:

 <input type="text" name="stocks[0].Key" value="MSFT" /> <input type="text" name="stocks[0].Value.CompanyName" value="Microsoft Corporation" /> <input type="text" name="stocks[0].Value.Industry" value="Computer Software" /> <input type="text" name="stocks[1].Key" value="AAPL" /> <input type="text" name="stocks[1].Value.CompanyName" value="Apple, Inc." /> <input type="text" name="stocks[1].Value.Industry" value="Consumer Devices" /> 

这是这样的:

 stocks[0].Key = "MSFT" stocks[0].Value.CompanyName = "Microsoft Corporation" stocks[0].Value.Industry = "Computer Software" stocks[1].Key = "AAPL" stocks[1].Value.CompanyName = "Apple, Inc." stocks[1].Value.Industry = "Consumer Devices" 

然后,它会是一样,如果我们写:

 stocks = new Dictionary<string, Company>() { { "MSFT", new Company() { CompanyName = "Microsoft Corporation", Industry = "Computer Software" } }, { "AAPL", new Company() { CompanyName = "Apple, Inc.", Industry = "Consumer Devices" } } }; 


Answer 2:

这IMO是你应如何处理这样的:

传递中的customerId你viewbag如果你真的不想做一个视图模型(PS这是确定做一个视图模型!)

public class OrderController : Controller
{
   public ActionResult Create(int customerID)
   {
      ViewBag.CustomerID = customerID
      Order ord = new Order(o);
      return View(ord);
   }
}

您的POST方法:

[HttpPost]
public ActionResult Create(int CustomerID, Order order)
{
  //create your order
}

您CSHTML

@model Company.Application.Model.Order;

@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "result" }))
{
    @Html.TextBoxFor(o => o.ItemName)
    @Html.TextBoxFor(o => o.SomeDate)
    @Html.Hidden("CustomerID",ViewBag.CustomerID)
    <input type="submit" value="Add" />
}


文章来源: MVC.Net binding complex models?