0

我有 2 个模型,员工和人员:

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 Haack 博客,但我不认为它反映了这种情况。

有谁知道在员工的 Create() 中绑定个人电话号码集合的解决方案?

4

2 回答 2

2

我不确定 PhoneNumber 是您创建的自定义类,还是内置于框架中的类。但是,如果您在使用 MVC3 将发布的数据映射到您指定的 Employee 类时遇到问题,您可能需要考虑创建自定义绑定。请记住,如果您的编辑器模板代码不正确,这并不重要,所以我会先使用 fiddler 来看看。

这里有一些很好的网站可以帮助您入门,我曾一度在 SO 上找到它们。 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 个主要功能,CreateModel以及BindModel. BindModel如果这是您想要的方式,那么您最有可能想要覆盖的功能。

于 2012-06-03T15:43:27.150 回答
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">
于 2012-06-03T15:28:08.253 回答