【发布时间】:2013-03-11 01:03:23
【问题描述】:
我有以下代码,现有客户。 我需要创建一个创建订单的表单,并将其传递给我的控制器。
我尝试将我在该页面上的模型类型更改为 Order 而不是 Customer,但是我还必须传递 Order 对象,或者至少传递 OrderId。
型号
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" />
}
【问题讨论】:
-
如果你正在创建一个订单,你的对象应该是一个订单。您想将问题与客户联系起来吗?不确定您为什么不使用 Order 对象进行绑定。
-
public ActionResult(Customer customer)这是一个错字吗?缺少函数名。 -
@Ravi 谢谢,这是一种修复它的类型。
-
@MikeC。问题是,如果订单对客户一无所知,并且我不想在订单中添加客户 ID,那么如果我将方法切换为期望订单,我将如何知道该订单属于哪个客户?尽量避免hacky代码,而不是单独传递客户ID
标签: asp.net ajax asp.net-mvc razor model-binding