ASP.NET

IEnumerableをControllerで受け取りたい

普段オフショアでコーディングお願いしているのですが、先方さんが旧お正月のため二週間近くお休み。。。

しばらく自力で頑張らないといけません。

C#というか、.net もなんとなく、なんとなーく使っているので、いつまでたってもビギナーのまま。。

 

IEnumerable<>がControllerのパラメータで取れない

まず、View

@model  IEnumerable<site.Models.PetModel>
@using (Html.BeginForm("Index", "Master", FormMethod.Post, new { @id = "frmIndex", role = "form" }))
{
  <button type="button" data-request-url="@Url.Action("Save")">SAVE</button>
  <table>
    <thead>
      <!-- 中略 -->
    </thead>
    <tbody>
      @foreach (site.Models.PetModel itm in Model)
      {
        <tr>
          <td>@Html.HiddenFor(m => itm.display_no)</td>
          <td>@Html.HiddenFor(m => itm.name)</td>
          <td>@Html.CheckBoxFor(m => itm.bEnabled)</td>
          <!-- 中略 -->
        </tr>
      }
    </tbody>
  </table>
}

ViewのModelを
@model  IEnumerable<site.Models.PetModel>
こんな風に書いたら

 

[HttpPost]
 public ActionResult Save(IEnumerable<PetModel> model)
{
}

public ActionResult Save(IEnumerable<PetModel> model)
これで取れるんじゃないの?と思ったら取れなかった。

海外サイトにいろんなやり方書いてあったけど、どれもうまくゆかず・・。

 

Request.Form.Get()を使う

public ActionResult Save()
{
  string[] enabled = Request.Form.Get("itm.bEnabled").Split(',');
}

結局、Request.Form.Get()でとれたよ。いいのかな?
もっとスマートなやり方ないでしょうか?
・・・あるかもしれない。

 

-ASP.NET

© 2021 Mikke's blog