如何获取ASP.NET MVC4表单post方法中的有序项列表

时间:2014-12-28 21:44:45

标签: asp.net-mvc html5 asp.net-mvc-4 razor

HTML5离线ASP.NET MVC4应用程序允许为客户输入订单数量。

订购的商品代码和数量不会传递给Order方法。 在下面的代码中Order方法Result参数值为null。 如何在Order方法中获取订购的商品代码和数量? 如何只发布订购数量大于0的商品? 产品清单很大,无序产品无法发布。 如果这是合理的话,我可以切换到ajax,jquery和MVC4 Web API。

控制器:

public class OfflineOrderController : ControllerBase
{
    public class OrderedItems
    {
        public string Id;
        public decimal Quantity;
    }

    [HttpGet]
    public ActionResult Order(string customerId)
    {
        return View(new MobileOrderOrderViewModel(customerId));
    }

    [HttpPost]
    public ActionResult Order(string customerId, IEnumerable<OrderedItems> Result)
    {
      ... save order to database
        return new ContentResult() { Content = "Order received" };
    }
}

查看:

<!DOCTYPE html>
<html manifest="~/MobileOrder/Manifest">
<body>
@using (Html.BeginForm())
{
    <table>
        <tbody>
            @foreach (var product in Model.Products())
            {
                <tr>
                    <td>@product.Id</td>
                    <td>
                        <input type="hidden" name="Id" value="@product.Id" />
                        <input type="number" name="Quantity" min="0" max="10000000" />
                    </td>
                </tr>
            }
        </tbody>
    </table>
    <input type="submit" value="Send order">
    <input type="hidden" name="customerId" value="@Model.CustomerId" />
}
</body>
</html>

1 个答案:

答案 0 :(得分:0)

您是否尝试过Phil Haack在以下博客文章中描述的技术? http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

简而言之,您可以使用以下内容。如果您将Products设置为属性而不是方法调用,那就更好了。

@for (int i = 0; i < Model.Products.Length; i++) {
  <tr>
     <td>@Model.Products[i].Id</td>
     <td>
         @Html.HiddenFor(m => Model.Products[i].Title)
         @Html.TextBoxFor(m => Model.Products[i].Quantity)

     </td>
  </tr>
}

这将使用&#34; Products&#34;创建html元素。字首。为了确保它是正确的模型绑定,您可以使用以下内容:

[HttpPost]
public ActionResult Order(string customerId, [Bind(Prefix = "Products")] IEnumerable<OrderedItems> Result)
{.....}

免责声明:回答此问题时未对代码进行测试;它全部输入就在这里。