2016-07-14 20 views
4

ビューにモデルを返すアクションがあります。これはIEnumerable<T>です。ビューでは、foreachを使用してリストをループします。 T型にはAmountというプロパティがあります。ASP.NET Core 1.0 POST IEnumerable <T>〜コントローラ

ここでSAVEボタンをクリックすると、モデル(IEnumerable)をアクションにPOSTしたいと思います。 IEnumerbaleアイテム、そのプロパティAmountには正しい値が含まれている必要があります。

enter image description here

私はそれを送信すると、アクションでは、モデルがnullです。

@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

が問題視で@model IEnumerable<Product>IEnumerable<T>をテストするため

IEnumerable<Produt>

public class Product 
{ 

    public string Title { get; set; } 
    public int Amount { get; set; } 
} 

ビューディスプレイ製品です。私は、リストにあることを変更し、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> 
    } 

SAVE

1

それが最終的にMVCは、フォームのポストのために理解してシリアル化形式(元に沸く:アプリケーション/ X-WWW -form-urlencoded)。ですから、TagHelpersHtmlHelpersあなたは次のようにフォームをレンダリングしようとすることを確認してくださいを使用するとき:

Actionパラメータ:IEnumerable<Product> products
リクエスト形式:[0].Title=car&[0].Amount=10.00&[1].Title=jeep&[1].Amount=20.00


Actionパラメータ: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


Actionパラメータ:IEnumerable<string> states
リクエストフォーマット1:states=wa&states=mi&states=ca
リクエスト形式2:states[0]=wa&states[1]=mi&states[2]=ca


Actionパラメータ:Dictionary<string, string> states
リクエスト形式:states[wa]=washington&states[mi]=michigan&states[ca]=california

関連する問題