MVC 4 Pass Object
本文关键字:Object Pass MVC | 更新日期: 2023-09-27 18:27:22
在我的项目中,我有一个模型
Product (int int, String description, decimal price)
我还有另一个型号
Order (int id, virtual Product product, String customerName)
通过在产品之前添加虚拟,产品就是外键。我想能够下订单,但我如何将对象产品传递到下订单的形式。
假设用户首先通过点击购买按钮从列表中选择一个产品,然后他必须输入自己的名字(保持简单)。我应该如何将产品添加到输入您的姓名表格中?
我试图通过使用""手动将其添加到我的帖子处理程序中(从选择产品后的添加名称表单中)
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Order order)
{
order.ConnectedProduct = db.Products.Find(1);
if (ModelState.IsValid)
{
db.Orders.Add(order);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(order);
}
但这仍然会返回字段ConnectedProduct是必需的。(去bug显示有一个产品被选中)
ModelState保持运行ModelBinder的状态,这发生在管道的早期。因此,ModelState.IsValid会向您显示模型绑定+验证的结果,该验证发生在控制器中执行的代码之前。通过添加产品将对象的状态设置为有效这一事实不会改变以前的结果。
我建议您创建一个视图模型(不同于您的域模型),以便在控制器和视图之间传递,然后这些视图可以映射到控制器中的域模型。有一些有用的工具可以为您做大量的映射,以减少锅炉板代码。流行的选项(按字母顺序排列)是Automapper和ValueInjecter。