2012-06-03 5 views
0

나는, 직원과 사람이 개 모델 한 전화에 대한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 &이라는 사람을 바인딩 할 수 있지만 PhoneNumbers 컬렉션을 바인딩 할 수 없다는 것입니다.

나는 2008 Haack 블로그에 대해 알고 있지만이 상황을 반영한다고 생각하지 않습니다.

사람의 전화 번호 컬렉션을 직원의 Create()에 바인딩하는 해결책을 아는 사람이 있습니까?

+0

만들기보기에서 "바인딩 할 수 없다"는 것은 무엇을 의미합니까? 단순히 전화 번호 속성을 표시하지 않습니까? 저장 작업에는 바인드하지 않고 표시 만합니까? 자세한 내용을 제공하십시오. – StriplingWarrior

+0

전화 번호 클래스와 관련된 속성 이름은 디버깅 (번호, 전화 유형)에 나타나지만 그 값은 null입니다. 게다가, 내가 얼마나 많은 전화 번호를 추가했는지 (새 전화기 추가를 통해) 상관 없다. 콜렉션은 여전히 ​​1이고, 이전에 말했듯이 모든 값은 null이다. – 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

내가 PHONENUMBER 경우 정확히 모르겠어요를 는 사용자가 만든 사용자 지정 클래스이거나 프레임 워크에 기본 제공되는 사용자 지정 클래스입니다. 그러나 MVC3 매핑에 문제가있어 지정된 것처럼 Employee 클래스에 데이터를 게시 한 경우 사용자 정의 바인딩을 만드는 것이 좋습니다. 편집기 템플릿 코드가 올바르지 않으면이 점이 중요하지 않으므로 먼저 피 들러를 사용하는 방법을 살펴 보겠습니다.

여기에 몇 가지 좋은 사이트가 있습니다. 한 번에 모든 것을 찾을 수있었습니다. 사용자 정의 바인더 만들기 http://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspxhttp://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이 게시 된 모델 데이터를 분석하고 개체를 채우는 방법을 완벽하게 제어 할 수 있습니다. 대부분의 사람들이 오버라이드하는 두 가지 주요 기능은 CreateModelBindModel입니다. BindModel은 사용자가 가고 싶은 방식 인 경우 대체하려는 기능입니다.