1. ホーム
  2. asp.net-mvc

[解決済み】ASP.NET MVCのフォームでチェックボックスを処理するにはどうすればよいですか?

2022-04-02 19:42:16

質問

ご注意ください。 この質問は9年以上前のものです。

新しい質問を検索するか、以下の回答から特定のバージョンのMVCを検索するのがベストな方法です。

もし、あなたのバージョンに対応する回答が見つかった場合は、その回答にあなたが使用しているMVCのバージョンが含まれていることを確認してください。

<サブ <サブ (元の質問は以下から)


ちょっと奇抜な感じがしますが、私の知る限りでは、このようなやり方があるのですね。

私はオブジェクトのコレクションを持っており、ユーザーがそれらの1つまたは複数を選択することを望んでいます。 これは、私に "form with checkboxes." と言っています。私のオブジェクトは "selected" の概念を持っていません(それらは、wcf 呼び出しをデシリアライズして形成された初歩の POCOです)。 だから、私は次のようにします。

public class SampleObject{
  public Guid Id {get;set;}
  public string Name {get;set;}
}

ビューで

<%
    using (Html.BeginForm())
    {
%>
  <%foreach (var o in ViewData.Model) {%>
    <%=Html.CheckBox(o.Id)%>&nbsp;<%= o.Name %>
  <%}%>
  <input type="submit" value="Submit" />
<%}%>

そして、コントローラでは、ユーザーがチェックしたオブジェクトを把握する方法はこれだけです。

public ActionResult ThisLooksWeird(FormCollection result)
{
  var winnars = from x in result.AllKeys
          where result[x] != "false"
          select x;
  // yadda
}

また、ユーザーがチェックした項目については、FormCollection の値が単なる true ではなく "true false" としてリストアップされます。

明らかに、何か見落としている。 これは、html フォーム内で操作されるコレクション内のオブジェクトは、以下の方法で更新されることを念頭に置いて構築されていると思います。 UpdateModel() またはModelBinderを経由しています。

しかし、私のオブジェクトはこのために設定されていません。それは、この方法しかないということですか? 他に方法があるのでしょうか?

どのように解決するのですか?

Html.CheckBoxは何か変なことをしています。結果のページのソースを表示すると <input type="hidden" /> これは、各フォーム要素に表示されている "true false" の値を説明するものです。

これはASP.NET MVC Betaで間違いなく動作するので、試してみてください。

Html.CheckBox()を使用する代わりに、これをビューに設置します。

<% using (Html.BeginForm("ShowData", "Home")) {  %>
  <% foreach (var o in ViewData.Model) { %>
    <input type="checkbox" name="selectedObjects" value="<%=o.Id%>">
    <%= o.Name %>
  <%}%>
  <input type="submit" value="Submit" />
<%}%>

チェックボックスはすべて selectedObjects で、その value は、対応するオブジェクトのGUIDです。

そして、以下のコントローラのアクションに投稿します (Response.Write() の代わりに何か役に立つことをする、似たようなものでもよいです)。

public ActionResult ShowData(Guid[] selectedObjects) {
    foreach (Guid guid in selectedObjects) {
        Response.Write(guid.ToString());
    }
    Response.End();
    return (new EmptyResult());
}

この例では、チェックしたボックスのGUIDを書き込むだけです。ASP.NET MVCは、選択されたチェックボックスのGUIDの値を Guid[] selectedObjects また、Request.Form コレクションの文字列を解析してインスタンス化された GUID オブジェクトを生成することもできます。