Asp.net mvc ASP.NET MVC-使用表单发布多个复杂对象

Asp.net mvc ASP.NET MVC-使用表单发布多个复杂对象,asp.net-mvc,form-submit,Asp.net Mvc,Form Submit,在ASP.NET MVC应用程序中,我试图用一个表单提交多个对象。我能够得到简单的类型发布回来,但我有复杂类型的问题。我觉得我模仿了Phil Haack在他的博客文章中提供的例子,但没有运气。甚至连复制他的代码都没有用 我试图填充一组MachineLicenseBillback对象的ProjectNum和TaskNum属性。不幸的是,IList machinePts在发布时总是以null结尾 我错过了什么 课程 public class MachineLicenseBillback {

在ASP.NET MVC应用程序中,我试图用一个表单提交多个对象。我能够得到简单的类型发布回来,但我有复杂类型的问题。我觉得我模仿了Phil Haack在他的博客文章中提供的例子,但没有运气。甚至连复制他的代码都没有用

我试图填充一组
MachineLicenseBillback
对象的
ProjectNum
TaskNum
属性。不幸的是,
IList machinePts
在发布时总是以null结尾

我错过了什么

课程

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)
{
  // ...
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult TrueUp(int id,IList 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" />
<% } %>

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

public ActionResult TrueUp(int id, MachineLicenseBillback[] machinePts)
{
  // ...
}
查看代码,如果要绑定到
IDictionary
(而不是ILST),可以在视图中使用键/值对。或者可以在视图中保留当前拥有的代码,并在控制器方法中使用数组作为参数


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

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

我也没有成功地使Phil Haack的示例代码正常工作。我还尝试了一些其他绑定到列表的示例,但没有成功。尝试切换TrueUp操作以查找
MachineLicenseBillback
对象数组,我遇到了相同的问题:machinePts在回发时为
null
。我读过Hanselman的帖子,但Haack例子中的IList似乎更清晰。那太糟糕了。。。您是否有一个链接,指示从MVC 1 RTM中删除此项的位置?更奇怪的是为什么,考虑到MVC2很快就会推出,这并不重要。简而言之,没有足够的人要求它,所以它被删除,QA资源被转移到其他地方。