注意:この質問は9年以上前のものです。
あなたの最良の選択肢は、新しい質問を検索するか、以下の回答を検索して特定のバージョンのMVCを探すことです。
ご使用のバージョンで有効な回答が見つかった場合は、使用しているMVCのバージョンが回答に含まれていることを確認してください。
(元の質問は以下から始まります)
これは少し奇妙に思えますが、私の知る限り、これがあなたのやり方です。
オブジェクトのコレクションがあり、ユーザーにそれらの1つ以上を選択してもらいたい。これは「チェックボックス付きのフォーム」と私に言っています。私のオブジェクトには、「選択された」という概念はありません(これらは、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)%> <%= 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 を使用して、またはModelBinderを介して更新されるという考えを念頭に置いて構築されていると思います。
しかし、私のオブジェクトはこのためにセットアップされていません。これが唯一の方法ということですか?それを行う別の方法はありますか?