我有一个带有af形式的页面,其中包含一个包含产品的下拉列表,该页面上还有一些关于订单的信息。这就是为什么我制作了一个viewmodel将产品和订单发送到htmlpage。 我想从下拉列表(产品ID)和隐藏的orderid中提交所选产品,但是当我点击按钮时,我的页面不起作用。它没有将数据提交给控制器,也没有到达断裂线。
我的代码:
控制器
public ActionResult ChangeOrder(int orderId)
{
var order = _db.Orders.Where(o => o.OrderId == orderId).FirstOrDefault();
var productCategory = _db.Products.Where(p => p.ProductId == order.ProductId).Select(c => c.CategoryId).First();
var producten = _db.Products.Where(p => p.CategoryId == productCategory && p.Availability == true).ToDictionary(p => p.ProductId, p => p.Description);
return View(new OrderProductViewModel(producten, order));
}
[HttpPost]
public ActionResult ChangeOrder(OrderProductViewModel key)
{
var test = key;
return null;
}
HTML页面的一部分
<div class="panel panel-default">
<div class="panel-body">
@using (Html.BeginForm("ChangeProduct", "Order", FormMethod.Post, new { role = "form" }))
{
@Html.Hidden("orderid", Model.Order.OrderId)
<div class="form-group">
@Html.DropDownListFor(
m => m.Products, new SelectList(Model.Products, "Key", "Value"), "select product", new { @class = "form-control" })
</div>
<input type="submit" value="Wijzig" class="btn btn-primary" />
}
</div>
</div>
视图模型
public class OrderProductViewModel
{
public IDictionary<int, string> Products { get; set; }
public Order Order { get; set; }
public OrderProductViewModel(IDictionary<int, string> products, Order order)
{
this.Products = products;
this.Order = order;
}
}
我错过了什么?
答案 0 :(得分:1)
感谢mjwills在ChangeProduct
指出ChangeOrder
应为Html.BeginForm
。这是我的第一个错误。
第二
这是我的固定构造函数。我得到了正确的参数atm。
[HttpPost]
public ActionResult ChangeOrder(int orderid, int Products)
{
//implementation here
return null;
}