0

私はこの質問の提案に従いました...

[ ASP.NET MVC フォームでチェックボックスを処理するには?

...同じ name="..." 属性を持つ複数のチェックボックスを設定すると、フォームは最初に送信されたときに期待どおりに動作します。フォームの後続の送信では、チェックされた項目値の新しい配列を適切に送信する代わりに、Guid 値の元の配列が使用されます。

ビュー内の関連コード...

 <% foreach (ItemType itemType in ViewData.Model.ItemTypes) %>
        <%{ %>
        <li>
            <input id="selectedItems" name="selectedItems" type="checkbox" value="<%= itemType.Id%>" />
            <%= itemType.Description %></li>
        <%} %>

これにより、項目の Id に設定された value="..." 属性を持つ項目ごとに 1 つずつ、一連​​のチェックボックスが生成されます。

次に、コントローラー アクションでは、メソッド シグネチャは...

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SelectItems(Guid[] selectedItems)
{...}

メソッドを初めて使用すると、selectedItems 配列は選択された各項目の Guid を適切に保持します。ただし、フォームの後続の送信には、フォームを送信する前にチェックした内容にどのような変更を加えても、最初の送信アクションで最初に選択されたものが常に含まれます。MVC フレームワークがメソッドに渡す selectedItems 配列を調べると、フレームワークが常に同じ値を何度も送信しているように見えるため、これは私のコードとは関係がないようです。

ブラウザーを閉じて、もう一度開始し、送信時に別の初期チェックボックスを選択すると、プロセスが最初からやり直されます (最初に選択されたチェックボックス ID は、常にselectedItems 引数にあるものです)。

フレームワークによる何らかのフォーム値のキャッシュを見落としていると思いますが、これは Preview 5 ではこのように動作しませんでした。

私を夢中にさせ、おそらく単純な問題です。何か案は????

4

2 に答える 2

1

FWIW、これが私がしていることです(それが関連しているかどうかはわかりません):

  // please MS, stop screwing around!!!!!!!!!!!!!!!
  string r = Request.Form["r"];

次に、「r」から手動で値を抽出します。私はまだ Preview 4 を使っています。なぜなら、Preview 4 はあまりにも多くの既存の機能を壊し、報告されたバグを修正していないからです。

于 2008-12-01T12:29:26.360 に答える
0

問題の原因はわかりませんが、WAG があります...

コントローラーの Post メソッドで RedirectToAction を使用していますか?

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SelectItems(Guid[] selectedItems)
{
  /* lol snip */
  return RedirectToAction("WhateverActionIsTheGetVersionOfThisPostAction");
}

バックグラウンドで起こっていることをリセットするのに役立つかもしれません.

于 2008-12-01T13:05:06.990 に答える