2012-06-03 190 views
0

我有2款,員工和負責人:MVC 3 /實體框架:綁定集合

public class Employee 
{ 
    [Key] 
    public int Id { get; set; } 
    public int? PersonId { get; set; } 

    [ForeignKey("PersonId")] 
    public virtual Person Person { get; set; } 

} 

public class Person 
{ 
    public IList<PhoneNumber> PhoneNumbers { get; set; } 
    public int Id { get; set; } 
    public string FName { get; set; } 
    public string LName { get; set; } 
    public Person() 
    { 
     PhoneNumbers = new List<PhoneNumber> 
          { 
           new PhoneNumber() 
          };  
    } 
} 

編輯模板電話:

  @Html.TextBoxFor(x => x.Number) 
     @Html.DropDownListFor(m => m, new SelectList(Enum.GetNames(typeof (WebMVC.Core.Common.PhoneType)))) 

爲了減少混亂,我刪除了其他(非相關)屬性。

我遇到的困難是在Employee Create()中,我可以綁定人員FName & LName,我無法綁定PhoneNumbers集合。

我知道2008年的哈克博客,但我不認爲這反映了這種情況。

有沒有人知道一個解決方案來綁定員工的Create()中的人員電話號碼集合?

+0

當你說在創建視圖中「無法綁定」它們時,你是什麼意思?它只是不顯示電話號碼屬性?它是否顯示它們,但不保存在保存操作中?提供更多細節。 – StriplingWarrior

+0

相對於電話號碼類的屬性名稱確實出現在調試(即號碼,電話類型)中,但它們的值爲空。此外,無論我添加多少個電話號碼(通過添加新電話),集合仍然是1,並且正如我之前所說的,所有值都爲空。 – aaa

+0

您的編輯器視圖代碼生成的是什麼html?什麼參數名稱/值對被髮送到保存操作? – StriplingWarrior

回答

1

我不知道從編輯模板中的HTML的樣子,但綁定到自定義類型的集合,它應該是這個樣子:

<input name="[0].Number"> 
<input name="[0].PhoneType"> 
<input name="[1].Number"> 
<input name="[1].PhoneType"> 
<input name="[2].Number"> 
<input name="[2].PhoneType"> 
2

我不是,如果******中國完全確定是您創建的自定義類,或者是構建在框架中的類。但是,如果您將MVC3映射發佈數據映射到您指定的Employee類時遇到問題,您可能需要查看創建自定義綁定。請記住,如果你的編輯器模板代碼不正確,這不會太重要,所以我會首先看看使用提琴手的那個。

這裏有幾個很好的網站可以幫助你開始,我發現它們都是在某一點上。 http://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspx http://odetocode.com/blogs/scott/archive/2009/05/05/iterating-on-an-asp-net-mvc-model-binder.aspx http://www.singingeels.com/Articles/Model_Binders_in_ASPNET_MVC.aspx

創建定製綁定使您認爲MVC解析您發佈模型數據和填充物的方式完全控制。大多數人會覆蓋2個主要功能,CreateModelBindModelBindModel是您希望覆蓋的功能,如果這是您想要的方式。