【发布时间】:2018-03-19 16:41:37
【问题描述】:
为什么 MVC 不能绑定 my 复杂对象列表?我已经阅读了几个关于这个主题的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" }))
【问题讨论】:
-
您需要共享后控制器操作的代码,并告诉我们您在提交表单时会得到什么
-
@ChetanRanpariya "视图显示变量很好,但是当我提交表单时没有任何反应。没有调用控制器操作。"
-
是的,我认为这不是控制器操作的问题,但我已将其包含在内。
-
当我提交表单时没有任何反应 - 这个神秘表单的定义在哪里?它不提交是因为它不存在,还是您只是碰巧忽略了代码中最重要的部分?
-
@BrandonChurch 让你的代码“完整”到足以解决问题的最佳方法是提供一个完整的控制器类、视图文件和模型。这意味着将您的控制器减少到 2 个操作,
GET和POST。将您的模型缩减为仅显示问题所需的部分。使用提交按钮和适当的输入代码将视图缩小为表单标签。这样我就可以真正创建一个新项目,将你的 3 个文件复制粘贴到那里,点击运行并查看问题发生(即 MCVE)。然后我们可以努力找出它发生的原因。
标签: c# asp.net-mvc