【问题标题】:ASP.NET Core 1.0 POST IEnumerable<T> to controllerASP.NET Core 1.0 POST IEnumerable<T> 到控制器
【发布时间】:2016-07-14 13:47:38
【问题描述】:

我有一个操作将模型返回到视图 IEnumerable&lt;T&gt;。在视图中,我使用 foreach 遍历列表。 T 类型有一个名为 Amount 的属性。

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

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

为了测试IEnumerable&lt;T&gt;IEnumerable&lt;Produt&gt;

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)
    {

    }

【问题讨论】:

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


    【解决方案1】:

    问题是视图中的@model IEnumerable&lt;Product&gt;。我将其更改为 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>
       }
    

    保存

    【讨论】:

      【解决方案2】:

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

      动作参数:IEnumerable&lt;Product&gt; products
      请求格式:[0].Title=car&amp;[0].Amount=10.00&amp;[1].Title=jeep&amp;[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&amp;Products[0].Title=car&amp;Products[0].Amount=10.00&amp;Products[1].Title=jeep&amp;Products[1].Amount=20.00


      动作参数:IEnumerable&lt;string&gt; states
      请求格式1:states=wa&amp;states=mi&amp;states=ca
      请求格式2:states[0]=wa&amp;states[1]=mi&amp;states[2]=ca


      动作参数:Dictionary&lt;string, string&gt; states
      请求格式:states[wa]=washington&amp;states[mi]=michigan&amp;states[ca]=california

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-31
        • 2020-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-04
        • 1970-01-01
        相关资源
        最近更新 更多