asp.net-mvc如何在 ASP.NET MVC4 表单 post 方法中获取订购物品列表

发布时间: 2016/10/8 0:10:12
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

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

订购的物料代码和数量不传递给命令的方法。 在下面命令代码方法结果参数值为 null。 如何获得订购项目代码和数量顺序方法? 如何只过帐项其订购的数量大于 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:

你试过菲尔 Haack 以下博客文章中所描述的技术吗? http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

简而言之,您可以使用类似如下的内容。如果你使产品属性而不是方法调用,它就好。

@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>
}

这将创建 html 元素与"产品"前缀。为了确保它是正确绑定的模型,你可以使用这样的事情︰

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

免责声明︰没有代码进行了测试,当回答这个问题;所有在这里键入它。

官方微信
官方QQ群
31647020