2010-06-01 3 views
0

이 사진은 나에게는 분명히 분명한 것처럼 보입니다. 그러나 어떤 이유로 나는 원하는 방식으로 작동시키지 못합니다. 아마 내가 할 수있는 방법이 아니지만 가능성은 희박합니다. 이 질문은 다소 관련이 있습니다 : ASP.NET MVC Model Binding Related Entities on Same Page.ASP.NET MVC - 모델에 하위 엔터티 바인딩

여러 관련 엔터티 참조가있는 엔터티를 편집하는 EditorTemplate이 있습니다. 편집기가 렌더링 될 때 드롭 다운 목록에서 관련된 엔티티를 선택할 수있는 드롭 다운 목록이 제공됩니다. 드롭 다운 목록은 값으로 ID를 반환합니다. "Entity.ID을"그러나 작업 매개 변수로 정의 내 강력한 형식의 모델 Entity.ID가 전달 된 값으로 채워하지 않습니다 요청 양식 값을 전송

<%=Html.DropDownListFor(m => m.Entity.ID, ...)%> 

예상대로 이름 의뢰.
public ActionResult AddEntity(EntityWithChildEntities entityWithChildEntities) { } 

나는 바인딩() 속성으로 주위 하구 시도하고 entityWithChildEntities에 Bind(Include = "Entity.ID")을 지정,하지만 작동하지 않습니다. 나는 또한 Bind(Include = "Entity")을 시도했지만 ModelBinder가 전체 "엔터티"정의를 바인딩하려고 시도했습니다 (놀랍지 않게).

하위 모델 ID를 채우기 위해 기본 모델 바인더를 가져 오는 방법이 있습니까? 아니면 각 하위 항목의 ID에 작업 매개 변수를 추가 한 다음 값을 모델 정의에 수동으로 복사해야합니까?

+0

'Entity' 속성에는'public'을 제외한 모든 액세스 한정자가 있습니까? 이런 식으로. 'public HomeTestModelChild Child {get; 내부 세트; }' – cem

+0

아니요, 모든 공개입니다. –

답변

1

AutoMapper를 보았습니까? 바인딩이 작동해야하기 때문에 이것이 필요하지 않아야한다는 것에 동의합니다.

Html.XYZFor 도우미를 사용하는 데 약간의 어려움을 겪었으며 MVC 1.1 표기법을 사용하기로 되돌려 놓았습니다.

+0

나는 AutoMapper를 실제로 체크 아웃하지 않았다. 한동안해야 할 일이있었습니다. –

0

하나의 매개 변수를 사용하는 DropDownListFor 도우미 메서드가 없습니다. 제 람다가 선택의 이름을 계산하는데 사용되며, 상기 제는 IEnumerable<SelectListItem>이다 : 표준 DropDownListFor 방법은 적어도 두 개의 매개 변수를 또한 EntityWithChildEntities 형처럼 보이는 않는 방법

<%= Html.DropDownListFor(m => m.Entity.ID, Model.EntitiesList) %> 

? 다음과 같이되어야합니다 :

public class EntityType 
{ 
    public string ID { get; set; } 
} 

public class EntityWithChildEntities 
{ 
    public EntityType Entity { get; set; } 

    public IEnumerable<SelectListItem> EntitiesList 
    { 
     get 
     { 
      return new[] 
      { 
       new SelectListItem { Value = "1", Text = "foo" }, 
       new SelectListItem { Value = "2", Text = "bar" }, 
      } 
     } 
    } 
} 
+0

답을 고맙게 생각하지만 내 의사 코드는 문자 그대로 해석되지 않았습니다. 구현의 관점에서 볼 때 모든 것이 적절하게 구성됩니다. 문제는 게시물의 형식에서 올바르게 명명 된 값을 받았음에도 불구하고 모델의 하위 엔터티가 채워지지 않는다는 것입니다. 즉, 양식 필드 이름과 값은 올바르지 만 모델 출력은 예상대로 아닙니다. –