我正在尝试动态构建一个需要在表单提交时绑定到ViewModel的表。
第一项是表单提交的动作。然后是Parent ViewModel,然后是子ViewModel。下面是两个代表我需要绑定的数据的文本字段。
当我提交表单时,页面中的所有其他字段都绑定到它们各自的属性,但ProgramViewModels的复杂对象不是。
我错过了什么?
public ActionResult Add(AddEntityViewModel viewModel){
Code that does something
}
public class AddEntityViewModel
{
public IList<int> Counties { get; set; }
public IList<ProgramViewModel> Programs { get; set; }
public IList<int> Regions { get; set; }
public string EntityName { get; set; }
public bool IsValid()
{
if (string.IsNullOrEmpty(EntityName))
return false;
if (Counties == null || Counties.Count == 0)
return false;
if (Programs == null || Programs.Count == 0)
return false;
if (Regions == null || Regions.Count == 0)
return false;
return true;
}
}
public class ProgramViewModel
{
public int Id;
public string SystemId;
}
<input type="hidden" id="Programs[0]__Id" name="Programs[0].Id" data-programid="3" value="3">
<input type="text" id="Programs[0]__SystemId" name="Programs[0].SystemId" style="width:100%" maxlength="50">
更新:
在adiga的回答之后将字段更改为属性。但这也没有解决问题。
public class ProgramViewModel
{
public int Id { get; set; }
public string SystemId { get; set; }
}
答案 0 :(得分:2)
您的ProgramViewModel
包含字段。将它们更改为属性。
public class ProgramViewModel
{
public int Id { get; set; }
public string SystemId { get; set; }
}
DefaultModelBinder
使用反射并仅绑定属性而不绑定字段。
答案 1 :(得分:0)
如果你有一个对象列表,你应该执行foreach指令来获取所有对象:
<% foreach(var x in values) { %>
<div>hello <%= x.name %></div>
<% } %>