我有以下代码,与现有的客户。 我需要创建创建一个订单形式,并将其传递给我的控制器。
我试图改变该网页上我的模型类型订单,而不是客户,但后来我会必须通过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" />
}
我想你在寻找什么这个博客文章介绍: 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" } } };
这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" />
}