LoginSignup
2
0

More than 5 years have passed since last update.

@Html.BeginForm() の第3 (第4?) 引数にコントローラに渡すパラメタを指定しようとしても無駄な件

Last updated at Posted at 2015-02-04

Razor 記法に対応したコードハイライトはまだないのかー… orz

<table>
  <tr>
    <th>社員番号</th>
    <th>所属部署</th>
    <th>氏名</th>
    <th>詳細</th>
  </tr>
  @foreach (var staff in ViewBag.StaffList as IEnumerable<StaffInfo>)
  {
    <tr>
      <td>@staff.Number</td>
      <td>@staff.PostName</td>
      <td>
        @staff.Name
        (@CommonUtils.CalcAge(staff.Birth) / @staff.Sex)
      </td>
      <td>
        @using (Html.BeginForm("StaffDetail", "StaffMaster",
          new { sn = staff.Number }, FormMethod.Get))
        {
          <button type="submit">詳細...</button>
        }
      </td>
    </tr>
  }
</table>

…などと書いたりした場合、@using (Html.BeginForm()) { ... } ブロックの部分について…

期待する出力結果:

<form action="/StaffMaster/StaffDetail" method="get">
  <input type="hidden" name="sn" value="12345678" />
  <button type="submit">詳細...</button>
</form>

実際の出力結果:

<form action="/StaffMaster/StaffDetail?sn=12345678" method="get">
  <button type="submit">詳細...</button>
</form>

…おいコラ。こんな HTML でブラウザがフォームパラメータをちゃんと渡してくれると本気で思ってるのか? (とりあえず Firefox ではパラメータが渡されませんでした)

ドキュメントにもちゃんと

ルートのパラメーターが含まれるオブジェクト。 オブジェクトのプロパティを調べることで、リフレクションを介してパラメーターが取得されます。 通常、このオブジェクトは、オブジェクト初期化子構文を使用して作成されます。

って書いとるやんか… ちゃんと期待したとおりに動いてえな…。

(Visual Studio 2013 / .NET Framework 4.5 にて確認)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0