我有以下 ViewModel
public class RecommendationModel
{
public List<CheckBoxItem> CheckBoxList { get; set; }
}
public class CheckBoxItem
{
public string Text { get; set; }
public bool Checked { get; set; }
public string Link { get; set; }
}
使用以下查看
model Sem_App.Models.RecommendationModel
@using (Html.BeginForm())
{
for (int i = 0; i < Model.CheckBoxList.Count(); i++) {
@Html.CheckBoxFor(m => m.CheckBoxList[i].Checked)
@Html.DisplayFor(m => m.CheckBoxList[i].Text)
}
<input type="submit" value="Add To Playlist" />
}
使用以下控制器操作
//get
public ActionResult Recommendation()
{
RecommendationModel model = new RecommendationModel();
model.CheckBoxList = new List<CheckBoxItem>();
return PartialView(model);
}
//post
[HttpPost]
public ActionResult Recommendation(RecommendationModel model)
{
foreach (var item in model.CheckBoxList)
{
if (item.Checked)
{
// do something with item.Text
}
}
}
问题是每当我选择一些项目并按下提交按钮时,返回的模型将CheckBoxList设置为空。如何更改视图以返回CheckBoxList列表?试
@Html.HiddenFor(m => m.checkBoxList)
对我不起作用
答案 0 :(得分:1)
我认为你需要这样的东西
@using (Html.BeginForm())
{
for (int i = 0; i < Model.CheckBoxList.Count(); i++) {
@Html.CheckBoxFor("Model.CheckBoxItem[" + i + "].Checked" , m => m.CheckBoxList[i].Checked)
@Html.DisplayFor("Model.CheckBoxItem[" + i + "].Text",m => m.CheckBoxList[i].Text)
}
答案 1 :(得分:0)
检查复选框输入名称在呈现的html中的方式,并检查表单操作是否发送到corrent controller / action并且方法是post
它应该是非常简单的东西..创建动作参数作为数组,具有相同名称的“名称”属性形式复选框输入
类似这样的事情
[HttpPost]
public ActionResult Delete(int[] checkName)
{
}
答案 2 :(得分:0)
尝试将该链接添加为隐藏字段:@Html.HiddenFor(m => m.CheckBoxList[i].Link )