如何在Razor Pages中无需指定索引绑定对象数组?
Razor Pages如何绑定无索引的对象数组提交数据?
我有一个Razor Pages页面,希望提交一组可在客户端编辑(添加、修改、删除)的对象并实现自动绑定。比起指定数组项索引(如name=Ship.Products[1].ProductId),省略索引的写法(如name=Ship.Products[].ProductId)更便捷,但Razor Pages似乎无法识别这种无索引的数据。
模型
public class EditShipViewModel { public int Id { get; set; } [Required] [StringLength(80)] public string Name { get; set; } [StringLength(80)] public string Shipper { get; set; } [StringLength(80)] [DisplayName("Port of Origin")] public string PortOfOrigin { get; set; } [DisplayName("Is Empty")] public bool IsEmpty { get; set; } [DisplayName("ETA")] public DateTime? Eta { get; set; } public DateTime? Arrival { get; set; } public DateTime? Departure { get; set; } public IEnumerable<EditShipProductViewModel> Products { get; set; } } public class EditShipProductViewModel { public int Id { get; set; } [DisplayName("Product")] public int ProductId { get; set; } [DisplayName("Inbound Quantity")] public double InboundQuantity { get; set; } }
页面属性
[BindProperty] public EditShipViewModel Ship { get; set; }
视图标记代码
<table class="table table-striped"> <tbody id="ship-products"> <tr> <td> <input name="Ship.Products[].Id" type="hidden" value="1"> <input name="Ship.Products[].ProductId" type="hidden" value="1"> </td> <td> <input name="Ship.Products[].InboundQuantity" type="hidden" value="1000"> </td> <td class="text-end">[Edit][Delete]</td> </tr> <tr> <td> <input name="Ship.Products[].Id" type="hidden" value="2"> <input name="Ship.Products[].ProductId" type="hidden" value="2"> </td> <td> <input name="Ship.Products[].InboundQuantity" type="hidden" value="2000"> </td> <td class="text-end">[Edit][Delete]</td> </tr> <tr> <td> <input name="Ship.Products[].Id" type="hidden" value="3"> <input name="Ship.Products[].ProductId" type="hidden" value="3"> </td> <td> <input name="Ship.Products[].InboundQuantity" type="hidden" value="3000"> </td> <td class="text-end">[Edit][Delete]</td> </tr> </tbody> </table>
是否有办法让Razor Pages绑定识别这种标记代码为对象数组?
更新
提交的实际数据格式如下:
- Ship.Products[].Id=1
- Ship.Products[].ProductId=1
- Ship.Products[].InboundQuantity=1000
- Ship.Products[].Id=2
- Ship.Products[].ProductId=2
- Ship.Products[].InboundQuantity=2000
- Ship.Products[].Id=3
- Ship.Products[].ProductId=3
- Ship.Products[].InboundQuantity=3000
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

