1

ビューに以下のコードがあり、その後送信ボタンがあります。ユーザーが好きなだけクリックできるように、私のビューにはこれらのチェックボックスがたくさんあります。

@Html.CheckBox("code" + l_code, false, new { Value = @item.expertiseCode })

私のコントローラーには、HTTPPost メソッドであるフルがあります。

public ActionResult RegisterSP(RegisterModel model, FormCollection collection)

ただし、デバッグ時に、クリックされたものだけでなく、すべてのチェックボックスがコントローラーに戻されていることがわかります。クリックされたものだけが必要で、残りは DB に追加する必要があるため無視します。また、渡されるチェック ボックスの値には TRUE/FALSE が含まれます。このため、偽の値も DB に追加されています。以下の方法を使用する場合(htmlHelperを使用しない場合)、上記の問題はありません。しかし、私はhtmlHelperを使いたいと思っています:

<input type="checkbox" name="code@(l_code)" value="@item.expertiseCode" />
4

2 に答える 2

1

チェックボックスのコレクションがある場合は、このようなViewModelを作成します

public class ExpertiseCodeViewModel 
{
  public string Name { set;get;}
  public int ExpertiseId { set;get;}
  public bool IsSelected { set;get;}
}

メインのViewModelで、これのコレクションをプロパティとして追加します

public class UserViewModel
{
  public List<ExpertiseCodeViewModel > Expertises{ set; get; }

  public UserViewModel()
  {
    if(this.Expertises==null)
       this.Expertises=new List<ExpertiseCodeViewModel>();
  }
}

ExpertiseCodeViewModel というエディタ テンプレートを作成します。

@model ExpertiseCodeViewModel 
@Html.CheckBoxFor(x => x.IsSelected)
@Html.LabelFor(x => x.IsSelected, Model.Name)
@Html.HiddenFor(x => x.ExpertiseId )

これをメイン ビューに含める

@model UserViewModel
@using (Html.BeginForm())
{
  //other elements
 @Html.EditorFor(m=>m.Expertises)
 <input type="submit" value="Save" />
}

HTTPPost アクション メソッドで、

[HttpPost]
public ActionResult Save(UserViewModel model)
{
  List<int> items=new List<int>();
   foreach (ExpertiseCodeViewModel objItem in model.Expertises)
   {
     if (objPVM.IsSelected)
     {
       //you can get the selected item id here
       items.Add(objItem.ExpertiseId);

     }
   } 
}
于 2012-05-11T10:31:15.490 に答える
0

試す

@Html.CheckBox("code" + l_code, false, new { @value = item.expertiseCode })

また

string name = "code" + l_code;
@Html.CheckBox(name, false, new { @value = item.expertiseCode })
于 2012-05-11T10:08:34.053 に答える