想象以下控制器方法:
public ActionResult ShipmentDetails(Order order)
{
return View(new OrderViewModel { Order = order });
}
传入订单参数从自定义模型活页夹填充,该活动要么为此会话创建新订单并将其存储在会话中,要么重新使用当前会话中的现有订单。此订单实例现在用于填写货件详细信息表单,用户可以在其中输入其地址等。
在视图中使用@using(Html.BeginForm())
时。我不能再为post方法使用相同的签名(因为这会导致模板的方法名称),我发现我添加了一个伪参数,只是为了让它起作用。
[HttpPost]
public ActionResult ShipmentDetails(Order order, object dummy)
{
if (!ModelState.IsValid)
return RedirectToAction("ShipmentDetails");
return RedirectToAction("Initialize", order.PaymentProcessorTyped + "Checkout");
}
这方面的最佳做法是什么?您是否只需将方法重命名为PostShipmentDetails()
并使用BeginForm
的重载之一?或者问题源自于第一种方法是否具有订单参数?
答案 0 :(得分:5)
您可以使用ActionName属性:
[HttpPost]
[ActionName("ShipmentDetails")]
public ActionResult UpdateShipmentDetails(Order order) { ... }
或更经典的模式:
public ActionResult ShipmentDetails(int orderId)
{
var order = Repository.GetOrder(orderId);
return View(new OrderViewModel { Order = order });
}
[HttpPost]
public ActionResult ShipmentDetails(Order order)
{
if (!ModelState.IsValid)
return RedirectToAction("ShipmentDetails");
return RedirectToAction("Initialize", order.PaymentProcessorTyped + "Checkout");
}