ASP.NET Core 1.0 POST IEnumerable <t>到控制器

时间:2016-07-14 13:47:38

标签: c# asp.net-mvc asp.net-core

我有一个操作可以将模型返回到IEnumerable<T>的视图。在视图中,我使用foreach遍历列表。 T类型具有名为Amount的属性。

现在,当我单击SAVE按钮时,我想将模型(IEnumerable)发布到动作。 IEnumerbale项目,其属性Amount应包含正确的值。

enter image description here

当我提交它时,在动作中,模型为空。

为了测试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)
    {

    }

2 个答案:

答案 0 :(得分:2)

视图中的问题是@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>
   }

保存

答案 1 :(得分:1)

它最终归结为MVC对表单帖子理解的序列化格式(例如:application / x-www-form-urlencoded)。因此,无论何时使用TagHelpersHtmlHelpers,请确保尝试按以下方式呈现表单:

动作参数: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
请求格式2:states[0]=wa&states[1]=mi&states[2]=ca

动作参数:Dictionary<string, string> states
请求格式:states[wa]=washington&states[mi]=michigan&states[ca]=california