MVC3无法将模型返回给控制器

时间:2012-03-26 00:41:22

标签: asp.net-mvc-3 model controller

我有以下 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)对我不起作用

3 个答案:

答案 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 )