2017-12-04 12 views
0

私はasp.netコアを初めて使用しています。私は読んできましたが、フォームのデータをフォームの後ろにコードとしてポストメソッドでサブミットする方法を知っています。それはいいです。しかし、オブジェクトのリストを送るのはどうですか?私がする必要があるのは、(この例では、ホテル管理室のタイプとレートタイプの場合)グリッドのようなもので、客室タイプのリストがあり、それぞれにレートタイプのリストがあります。これどうやってするの?私はそれをしたように、私は部屋の名前の名前を通過することができます(ただし、1つのオブジェクトとしてのみ)が、任意のレートです。asp.netコア2.0のクライアント側からオブジェクトのリストを取得

public class RateType 
    { 
     public string Name { get; set; } 
     public bool IsActive { get; set; } 
    } 

public class RoomType 
    { 
     public string Name { get; set; } 

     public List<RateType> Rates { get; set; } = new List<RateType>(); 
    } 
にHomeControllerで

public IActionResult RoomConfig() 
     { 
      return View(room); 
     } 

     [HttpGet] 
     public ViewResult SaveRoomConfig() 
     { 

      return View("RoomConfig"); 
     } 

     [HttpPost] 
     public ViewResult SaveRoomConfig(RoomType room) 
     { 

      return View("RoomConfig"); 
     } 

とビューで:

は私が(モデル)このようにそれを持っているので、

@model RoomType 
@{ 
    ViewData["Title"] = "RoomConfig"; 
} 

<h2>@Model.Name</h2> 

<form class="p-a-1" asp-action="SaveRoomConfig" method="post"> 
    @foreach (var item in Model.Rates) 
    { 
     <label asp-for="Name">@item.Name </label> 
     <input class="form-control" asp-for="Name" /> 
     <input asp-for="@item.IsActive" type="checkbox" /> 

    } 
    <button type="submit">Send</button> 

</form> 

、私は最初のオブジェクトを送信しますテスト用に事前定義された値がいくつかあり、それらはページに表示されます。しかし、「送信」をクリックすると、最初のオブジェクトのみを送信できます(オブジェクトパラメータがあるため、最初のオブジェクトのみを送信することができます)。それでも、ルームタイプのリストを入れてみましたオブジェクトのリストを他のオブジェクトのリスト(ネストされたもの)で渡すこれは可能ですか?それを渡す可能性があるだけでは意味がありません唯一のオブジェクトです。

答えて

0

私は、それが機能していない理由を理解しました。定義を空リストにバインドしていた'foreach'の代わりに 'for'ステートメントを書いてインデックスに行きました。そのようにして、オブジェクトを存在しないオブジェクトの代わりにリストの位置にバインドしました。 :

@model RoomType 
@{ 
    ViewData["Title"] = "RoomConfig"; 
} 


<form class="p-a-1" asp-action="SaveRoomConfig" method="post"> 
    <input asp-for="Name" /> 
    @for (int i=0;i< Model.Rates.Count;i++) 
    { 
     <div class=" form-control"> 
      <label asp-for="@Model.Rates[i].Name">@Model.Rates[i].Name </label> 
      <input asp-for="@Model.Rates[i].Name" /> 
      <input asp-for="@Model.Rates[i].IsActive" type="checkbox" /> 
     </div> 
    } 
    <button type="submit">Send</button> 

</form> 

誰かがこれを行うより良い方法を持っているなら、もちろん私はすべて耳です。 :)

関連する問題