Asp.net mvc @编辑器模型绑定问题

Asp.net mvc @编辑器模型绑定问题,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我试图在视图上生成两组复选框列表。这一切都是工作除了后行动。提交时, ParentViewModel未正确绑定ChildViewModel 模型第一个复选框列表 模型第二个复选框列表 以上两者都是空的 我不确定我错过了什么。这方面的任何帮助都会很好。 提前谢谢 CheckboxItems.cshtml @model List<CheckboxItem> @{ for (int i = 0; i < Model.Count(); i++) {

我试图在视图上生成两组复选框列表。这一切都是工作除了后行动。提交时, ParentViewModel未正确绑定ChildViewModel 模型第一个复选框列表 模型第二个复选框列表 以上两者都是空的

我不确定我错过了什么。这方面的任何帮助都会很好。 提前谢谢

CheckboxItems.cshtml

@model List<CheckboxItem>
@{        
    for (int i = 0; i < Model.Count(); i++)
    {
       <div>
       @Html.CheckBoxFor(x => x.ElementAt(i).Checked, new { @id = Model.ElementAt(i).Id, onclick = "GetValue()" })
          <span id="Padded">@Model.ElementAt(i).Text</span>
       </div> 
    }
}
控制器动作

   [HttpPost]
    public ActionResult MyCheckboxView(int planid,   ParentViewModel model, string nextBtn)
    {
        // do something
        return View(Model);
    }

尝试将您的视图模型更改为
ParentViewModel
,以使用
列表而不是
IEnumerable

另外,请确保您的
EditorFor
调用没有提供EditorTemplate的名称,因为这会弄乱“MVC魔术”(这说明它会自动迭代列表,而不使用模板名称,也不使用模板名称):


感谢您的回复1。制作列表并没有任何区别。2.如果我取For loop off如何,那么我会得到下面的错误,对吗?传递到字典中的模型项的类型为“System.Collections.Generic.List`1[CheckboxItem]”,但此字典需要CheckboxItem类型的模型项。很抱歉,
List
建议无效。至于第二点,请尝试通过删除templatename来更改
EditorFor
调用:
@Html.BeginForm(){@Html.EditorFor(m=>m.FirstCheckboxList)@Html.EditorFor(m=>m.SecondCheckboxList)}
能否显示生成的Html?将
id
提供给复选框而不是让模型绑定器设置其属性可能会出现问题own@kum123-那么,发布时对象是否仍然为空?如果它们现在已修复,请将此标记为答案。而且,这看起来不像HTML,而是看起来您已经从VisualStudio调试器中的请求对象复制并粘贴了一个值。请编辑您的问题并包括输出到web浏览器的HTML(按CTRL-U或右键单击>查看页面上的源代码)。我将编辑我的答案,以解释当您提供模板名称时,
Html.EditorFor()
为什么不起作用……正如您所解释的,它起了作用,但我很想知道。当您提到模板名称时,为什么它不起作用。感谢您的帮助。复选框名称应类似于firstchecboxlist[i]。字段名。。查看呈现的html
public class ParentViewModel
{       
    public int PId { get; set; }
    public IEnumerable<CheckboxItem> FirstCheckboxList{ get; set; }
    public IEnumerable<CheckboxItem> SecondCheckboxList{ get; set; }
    public Int64 FSelected { get; set; }
    public Int64 FUniverse { get; set; }
}
 public class CheckboxItem
  {
    public int Id { get; set; }
    public string Text { get; set; }
    public bool Checked { get; set; }
  }
   [HttpPost]
    public ActionResult MyCheckboxView(int planid,   ParentViewModel model, string nextBtn)
    {
        // do something
        return View(Model);
    }
public class ParentViewModel
{       
    public int PlanId { get; set; }
    public List<CheckboxItem> FirstCheckboxList{ get; set; }
    public List<CheckboxItem> SecondCheckboxList{ get; set; }
    public Int64 FSelected { get; set; }
    public Int64 FUniverse { get; set; }
}
@model CheckboxItem
@{        

   <div>
   @Html.CheckBoxFor(x => x.Checked, new { onclick = "GetSelectedFrame()" })
      <span id="Padded">@Model.Text</span>
   </div> 
    }
}
@Html.BeginForm(){ 
    @Html.EditorFor(m=> m.FirstCheckboxList) 
    @Html.EditorFor(m=> m.SecondCheckboxList) 
}