Asp.net mvc @编辑器模型绑定问题
我试图在视图上生成两组复选框列表。这一切都是工作除了后行动。提交时, ParentViewModel未正确绑定ChildViewModel 模型第一个复选框列表 模型第二个复选框列表 以上两者都是空的 我不确定我错过了什么。这方面的任何帮助都会很好。 提前谢谢 CheckboxItems.cshtmlAsp.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++) {
@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)
}