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>
答案 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)
{.....}
免责声明:回答此问题时未对代码进行测试;它全部输入就在这里。