ASP.Net MVC 3 Webアプリケーションを開発していますが、チェックボックスリストから値を取得する際にいくつかの問題があります。私はすでにStackoverflowに関するこの質問のほとんどを読んでいますが、まだいくつかの問題があります。ASP.Net MVC 3チェックボックスリストの値を取得する
は私がViewModelにに持って
public class ViewModelCheckBox
{
public string Id { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
}
public ActionResult AssignSubSpeciality(int id)
{
//Get a list of all sub-specialities
var SpecialityList = _listService.GetListItemsByID(3).ToList();
//Get a list of sub-specialities for the the passed in id, this is either the id of a speciality or grade
IList<RelationshipSpecialitySub> assignedSpecialities = _listService.GetAssignedSubSpecialities(id).ToList();
var checkBoxList = new List<ViewModelCheckBox>();
foreach (ListItem item in SpecialityList)
{
ViewModelCheckBox chkBox = new ViewModelCheckBox { Id = item.listItemID.ToString(), Name = item.description };
//If sub-speciality exists in assignedSpecialities list, then make checkbox checked
foreach (var specilaity in assignedSpecialities)
{
if (specilaity.subID == item.listItemID)
{
chkBox.Checked = true;
}
else
{
chkBox.Checked = false;
}
}
checkBoxList.Add(chkBox);
}
ViewModelAssignSubSpeciality viewModel = new ViewModelAssignSubSpeciality();
viewModel.ListItem = _listService.GetListItemByID(id);
viewModel.SpecialityList = checkBoxList;
return View(viewModel);
}
コントローラのコードは上記のリストを取得している私のコントローラに続いて
public class ViewModelAssignSubSpeciality
{
public ListItem Item { get; set; }
public IList<ViewModelCheckBox> SpecialityList { get; set; }
}
上記のviewmodelを使用して別のViewModelすべての可能性のあるチェックボックスリスト項目のうち、前に選択したすべてのcのリストを取得するheckboxチェックされたオプションをtrueに設定するアイテムをリストします。
Myビューは、SpecialityListをループして各アイテムのチェックボックスを作成し、必要に応じて選択した値をtrueに設定します。
<fieldset>
<legend>Specialities</legend>
@foreach (var item in Model.SpecialityList)
{
<input type="checkbox" id="@item.Id" name="@item.Name" value="@item.Id" @(item.Checked ? "checked" : "") />
<label for="@item.Id">@item.Name</label><br />
}
<input type="submit" value="Save Changes" class="sepH_b" />
私HttpPost私は
model.SpecialityList
で選択したチェックボックスを取得しようとすると、私のコントローラのメソッドは、それは常にnullたち、しかしこの
public ActionResult AssignSubSpeciality(ViewModelAssignSubSpeciality model)
{
//delete all sub-specialities in tbl relationshipSpecialitySub for List
foreach (ViewModelCheckBox item in model.SpecialityList)
{
//_listService.DeleteSubSpecialityFromSpeciality(item.Id);
}
return RedirectToAction("ListItems", new { id = model.ListItem.listID });
}
のように見えます。なぜそれがViewModelCheckBoxのリストを含んでいないのかわかりません。
誰でもこの手伝いできますか?
ありがとうございます。
+1ビューモデルとエディタテンプレートの場合+1。 –
偉大な答え。ありがとうございました。 – tgriffiths
興味深いことに、私はしばらくこのようなものを探していました。ありがとう。 –