![](/img/trans.png)
[英]ASP.NET Core - Bind IEnumerable<T> to a ViewModel field on POST
[英]ASP.NET Core 1.0 POST IEnumerable<T> to controller
我有一个动作,返回一个模型到视图IEnumerable<T>
。 在视图中,我使用foreach遍历列表。 T类型具有名为Amount的属性。
现在当我单击SAVE
按钮时,我想将模型(IEnumerable)发布到一个动作。 IEnumerbale项目,其属性Amount
应包含正确的值。
当我提交它时,在动作中,模型为空。
为了测试IEnumerable<T>
是IEnumerable<Produt>
public class Product
{
public string Title { get; set; }
public int Amount { get; set; }
}
查看显示产品:
@model IEnumerable<Product>
<form asp-controller="Home" asp-action="Order" method="post" role="form">
@foreach (var product in Model)
{
<div>
<span>@product.Title</span>
<input asp-for="@product.Amount" type="text">
</div>
}
<button type="submit">SAVE</button>
</form>
控制器后期行动:
[HttpPost]
public async Task<IActionResult> Order(IEnumerable<Product> model)
{
}
问题是@model IEnumerable<Product>
。 我将其更改为List并使用for循环:
@model List<Product>
<form asp-controller="Home" asp-action="Order" method="post" role="form">
@for (int i = 0; i < Model.Count(); i++)
{
<div>
<span>@Model[i].Title</span>
<input asp-for="@Model[i].Amount" type="text">
</div>
}
救
它最终归结为MVC理解表单帖子的序列化格式(例如:application / x-www-form-urlencoded)。 因此,无论何时使用TagHelpers
或HtmlHelpers
,请确保尝试以下列方式呈现表单:
操作参数: IEnumerable<Product> products
请求格式: [0].Title=car&[0].Amount=10.00&[1].Title=jeep&[1].Amount=20.00
操作参数: Manufacturer manufacturer
,其中Manufacturer
类型如下所示:
public class Manufacturer
{
public string Name { get; set; }
public List<Product> Products { get; set; }
}
public class Product
{
public string Title { get; set; }
public int Amount { get; set; }
}
请求格式: Name=FisherPrice&Products[0].Title=car&Products[0].Amount=10.00&Products[1].Title=jeep&Products[1].Amount=20.00
动作参数: IEnumerable<string> states
请求格式1: states=wa&states=mi&states=ca
ca.
请求格式2: states[0]=wa&states[1]=mi&states[2]=ca
动作参数: Dictionary<string, string> states
请求格式: states[wa]=washington&states[mi]=michigan&states[ca]=california
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.