表格发送空模型

时间:2014-06-19 15:58:13

标签: c# asp.net-mvc-4

我有一个要在View上修改的对象列表,我已经构建了一个View Model来包含对象列表:

public class TrainerListViewModel
    {
       public List<Trainer> Trainers { get; set; }
    }

我从控制器向视图发送了一个培训师列表:

 public virtual ActionResult Social()
        {
            var Trainers = new TrainerListViewModel();

            Trainers.Trainers = (from t in _db.Trainers select t).ToList();

            return View(Trainers);
        }

这是我的观点:

@model XStreamingFitness.ViewModels.TrainerListViewModel


@using (Html.BeginForm("Social", "Participant", FormMethod.Post))
{
    for (int i = 0; i < Model.Trainers.Count; i++)
    {
        <div class="formSep">

            <div class="editor-label">
                @Html.LabelFor(m => m.Trainers[i].permissionPostFacebook)
            </div>
            <div class="editor-field">
                @Html.EditorFor(m => m.Trainers[i].permissionPostFacebook)
                @Html.ValidationMessageFor(m => m.Trainers[i].permissionPostFacebook)
            </div>
        </div>
    }

    <input type="submit" value="Save Settings" name="Submit" />
}

现在这里是POST控制器方法:

[HttpPost]
        public virtual ActionResult Social(TrainerListViewModel Trainers)
        {

           return RedirectToAction("Profile");
        }

但每次提交时,培训师模型都是空的,我不确定为什么会发生这种情况。

1 个答案:

答案 0 :(得分:1)

此问题已经在此之前提出过,我建议您查看mvc3 submit model empty,它与您遇到的问题具有相同的原则。

请参阅帖子中的摘录。

  

我看到人们编写以下lambda表达式modelItem =&gt;   item.SomeProperty在他们的视图中非常经常地询问模型的原因   binder未正确绑定其视图上的集合属性   模型。

     

这不会为复选框生成正确的名称,因此默认为   model binder能够重新创建Settings集合。我会   建议您阅读以下blog post以更好地理解   模型绑定器期望的格式正确。

- 作者Darin Dimitrov

这与您构建表单的方式有关,他建议您使用属性编辑器模板作为Trainer对象。

这应该可行。

希望有所帮助