【问题标题】:How to get list of ordered items in ASP.NET MVC4 form post method如何在 ASP.NET MVC4 表单发布方法中获取已订购项目的列表
【发布时间】:2014-12-29 06:48:52
【问题描述】:

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

订购的商品代码和数量不会传递给 Order 方法。 在下面的代码中 Order 方法 Result 参数值为空。 如何在 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>

【问题讨论】:

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


    【解决方案1】:

    您是否尝试过 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>
    }
    

    这将创建带有“Products”前缀的 html 元素。为了确保它正确绑定模型,您可以使用以下内容:

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

    免责声明:回答此问题时未测试任何代码;都是在这里输入的。

    【讨论】:

    • 谢谢。有效。产品清单很大,订购的产品很少。如何只发布数量非零的已订购产品?是否可能且合理,或者是否应该为此使用 MVC4 Web API 和 javascript?如何将带有产品 ID 的非零数量发送到控制器?
    • 我在stackoverflow.com/questions/27695779/…发布了相关问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    相关资源
    最近更新 更多