注意: この質問は 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」としてリストします。
明らかに、私は何かが欠けています。UpdateModel()
これは、html フォーム内で操作されるコレクション内のオブジェクトが、ModelBinder を使用または介して更新されることを念頭に置いて構築されていると思います。
しかし、私のオブジェクトはこのように設定されていません。これしか方法がないということですか?それを行う別の方法はありますか?