2010-01-25 58 views
5

在ASP.NET MVC應用程序中,我嘗試使用單一表單提交多個對象。我能夠獲得簡單的類型來回發,但是遇到複雜類型的問題。我覺得我已經模仿Phil Haack在他的博客文章Model Binding To A List中提供的例子,但沒有運氣。即使只是複製他的代碼完全無濟於事。ASP.NET MVC - 在表單中發佈多個複雜對象

我想填充一組MachineLicenseBillback對象的ProjectNumTaskNum屬性。不幸的是,IList<MachineLicenseBillback> 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) 
{ 
    // ... 
} 

<% 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" /> 
<% } %> 
+1

我也有machinePts [0],machinePts [1],等等Phil Haack的示例代碼沒有成功。我也嘗試了其他一些綁定到列表的示例,但沒有任何運氣。 – 2010-01-25 23:23:12

回答

2

是爲MVC 1 RTM除去的.index語法和MVC 2.重新對於MVC 1,列表元素必須順序編號:

+0

那麼,這太糟糕了......你有鏈接指出這是從MVC 1 RTM中刪除?對於爲什麼*更好奇,並不是說真的很重要,因爲MVC 2很快就會出來。 – ahsteele 2010-01-26 00:37:32

+0

請參閱http://forums.asp.net/p/1377775/2906260.aspx。簡而言之,沒有足夠的人提出要求,因此將其刪除,並將質量檢查資源移至別處。 – Levi 2010-01-26 17:34:41

0

斯科特Hanselman有一個完整的演練here用於綁定項目列表。簡而言之,您的控制器方法需要一個MachineLicenseBillback的數組,而不是一個IList。在你的代碼

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

看,如果你想綁定到IDictionary(不是一個IList),您可以在視圖中使用鍵/值對來代替。或者可以保留當前視圖中的代碼,並使用Array作爲控制器方法中的參數。

要特別注意命名約定。如果命名不匹配,模型聯編程序將不會提取數據。

+0

嘗試切換TrueUp操作來查找'MachineLicenseBillback'對象的數組,並且遇到同樣的問題:machinePts在回發時爲'null'。我讀過漢塞爾曼的文章,但哈克案例中的「IList」似乎更清楚。 – ahsteele 2010-01-26 00:01:41