为什么MVC不能绑定我的复杂对象列表?我已经阅读了关于这个主题的几个examples,但没有解决这个问题。请考虑以下事项:
<小时/> 复杂版本
我有一个 ViewModel ,其中包含一个复杂对象列表作为属性:
public List<XMLVariable> XMLVariables { get; set; }
我的查看然后将此对象列表绑定到控件:
@for (int i = 0; i < Model.XMLVariables.Count(); i++)
{
@Html.HiddenFor(m => Model.XMLVariables[i].Name)
@Html.TextBoxFor(m => Model.XMLVariables[i].Value)
}
视图显示变量就好了,但是当我提交表单时没有任何反应。不调用控制器操作。
<小时/> 展平版
如果我在同一 ViewModel 中展平我的复杂对象列表(XMLVariables):
public List<string> Names { get; set; }
public List<string> Values { get; set; }
并将其映射到我的查看:
@for (int i = 0; i < Model.XMLVariables.Count(); i++)
{
@Html.HiddenFor(m => Model.Names[i])
@Html.TextBoxFor(m => Model.Values[i])
}
提交后,两个列表都会以正确的值传回。
<小时/> 控制器动作:
[HttpPost]
public ActionResult Submit(ReportViewModel report, string cmd)
{
}
表格签名:
@using (Ajax.BeginForm("Submit", "Report", new AjaxOptions {LoadingElementId = "progress", OnSuccess="OnSuccess", OnBegin="OnBegin", OnComplete="OnComplete" }))
答案 0 :(得分:0)
问题在于我的“XMLVariable”对象。如果有人像我一样有问题绑定自定义对象,则看起来MVC从View中的数据构造 new ViewModel,而不是传回修改后的版本。
我出于某种原因没有收到错误,但MVC中的默认模型绑定器是从头开始创建XML对象并尝试调用我设置的参数化构造函数:
public class XMLVariable
{
public string Name {get; set;}
public string Value { get; set; }
//MVC needed this parameterless constructor to bind View to new ViewModel
public XMLVariable()
{ }
//This was getting called before adding the parameterless constructor and failing
public XMLVariable(string name, string value)
{
Name = name;
Value = value;
}
}
感谢ChetanRanpariya指出我遇到了这个问题的网络追踪工具。
如果某人有声誉,请将此标记为我在事后找到的this问题的副本。