C# c IDictionary下拉列表httpPost

C# c IDictionary下拉列表httpPost,c#,http-post,html.dropdownlistfor,asp.net-mvc-viewmodel,idictionary,C#,Http Post,Html.dropdownlistfor,Asp.net Mvc Viewmodel,Idictionary,我有一个带有af表单的页面,其中有一个包含产品的下拉列表,该页面上还有一些关于订单的信息。这就是为什么我制作了一个viewmodel来将产品和订单发送到htmlpage。 我想从下拉列表中提交所选产品,包括产品id和隐藏的订单id,但当我单击按钮时,我的页面不起作用。它没有向控制器提交数据,也没有到达特征线 我的代码: 控制器 public ActionResult ChangeOrder(int orderId) { var order = _db.Orders.Wh

我有一个带有af表单的页面,其中有一个包含产品的下拉列表,该页面上还有一些关于订单的信息。这就是为什么我制作了一个viewmodel来将产品和订单发送到htmlpage。 我想从下拉列表中提交所选产品,包括产品id和隐藏的订单id,但当我单击按钮时,我的页面不起作用。它没有向控制器提交数据,也没有到达特征线

我的代码:

控制器

 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;

    }
}

我遗漏了什么?

感谢mjwills指出ChangeProduct应该是Html.BeginForm上的ChangeOrder。那是我的第一个错误

第二:

这是我的固定构造函数。我得到了正确的参数

    [HttpPost]
    public ActionResult ChangeOrder(int orderid, int Products)
    {
        //implementation here
        return null;
    }

Html.BeginFormChangeProduct应该是Html.beginformchangeorder当我从dropdownlist获取productid时,我想更新数据库中的顺序,该顺序也会在Html页面上显示新选择的产品。键入此命令,我想我还需要将orderid发布到控制器。将添加一个hiddenhtml字段:它没有向控制器提交数据。当您将数据指向ChangeProduct时,为什么您希望它到达您的ChangeOrder操作?天哪,您的右边。多么愚蠢的错误啊。当我将其更改为ChangeOrder时,我得到一条消息:没有为此对象定义无参数构造函数。