5

在 ASP.NET MVC 应用程序中,我试图用一个表单提交多个对象。我能够将简单类型发回,但遇到复杂类型的问题。我觉得我模仿了 Phil Haack 在他的博客文章模型绑定到列表中提供的示例,但没有运气。甚至完全复制他的代码也无济于事。

我正在尝试填充一组对象的ProjectNum和属性。不幸的是,发布时总是以null结尾。TaskNumMachineLicenseBillbackIList<MachineLicenseBillback> machinePts

我错过了什么?

班级

public class MachineLicenseBillback
{
    public MachineLicenseBillback() { }

    public virtual int MachineId { get; set; }
    public virtual string ProjectNum { get; set; }
    public virtual string TaskNum { get; set; }
    public virtual string VerifiedFlag { get; set; }
    public virtual DateTime? RcdChgDateTime { get; set; }
    public virtual string RcdChgAgent { get; set; }
}

行动

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult TrueUp(int id, IList<MachineLicenseBillback> machinePts)
{
  // ...
}

形式

<% using (Html.BeginForm("TrueUp", "Home", new { id = Model.Customer.Id },
             FormMethod.Post))
   { %>
<input type="hidden" name="machinePts.Index" value="<%= machine.MachineId %>" />

<input type="text" name="machinePts[<%= machine.MachineId%>].ProjectNum"
  value="<%= machine.MachineLicenseBillback.ProjectNum %>" />

<input type="text" name="machinePts[<%= machine.MachineId %>].TaskNum"
  value="<%= machine.MachineLicenseBillback.TaskNum %>" />

<input type="submit" value="Submit" />
<% } %>
4

2 回答 2

2

MVC 1 RTM 删除了 .Index 语法,并在 MVC 2 中重新引入。对于 MVC 1,列表元素必须按顺序编号:machinePts[0]、machinePts[1] 等。

于 2010-01-26T00:23:19.180 回答
0

Scott Hanselman 在这里有一个完整的项目绑定列表演练。简而言之,您的控制器方法需要一个数组MachineLicenseBillback,而不是一个IList.

public ActionResult TrueUp(int id, MachineLicenseBillback[] machinePts)
{
  // ...
}

查看您的代码,如果您想绑定到一个IDictionary(不是 IList),您可以在视图中使用键/值对。或者可以将您当前拥有的代码保留在视图中,并在控制器方法中使用数组作为参数。

请特别注意命名约定。如果命名不匹配,模型绑定器将不会提取数据。

于 2010-01-25T23:38:30.763 回答