2010-04-11 7 views
0

저는 ASP MVC에 상당히 익숙합니다.ASP MVC : 중첩 된 사용자 컨트롤이있는 양식 제출

각자 독자적인 뷰 모델을 가진 다수의 사용자 컨트롤 (부분보기, System.Web.Mvc.ViewUserControl과 같은)을 포함하는 폼이 있으며, 그 중 일부 사용자 컨트롤에는 그 안에 중첩 된 사용자 컨트롤이 있습니다. 이러한 사용자 컨트롤을 다시 사용하여이 방식으로 계층 구조를 사용하여 양식을 작성하고 양식에 모든 사용자 컨트롤의보기 모델이 포함 된 상위보기 모델을 전달합니다. 예를 들어

:

Parent Page (with form and ParentViewModel) 
    -->ChildControl1 (uses ViewModel1 which is passed from ParentViewModel.ViewModel1 property) 
    -->ChildControl2 (uses ViewModel2 which is passed from ParentViewModel.ViewModel2 property) 
    -->ChildControl3 (uses ViewModel3 which is passed from ViewModel2.ViewModel3 property) 

나는이 말이 희망 ...

내 질문은 내가보기 데이터를 검색 어떻게 양식을 제출한다? 보기 데이터가 ParentViewModel에 바인딩 할 수 없습니다 것 같다

viewData.ViewModel1 및 viewData.ViewModel2 등
public string Save(ParentViewModel viewData)... 

는 항상 null입니다. 사용자 지정 바인딩을 수행 할 수있는 방법이 있습니까?

궁극적으로 동적 인 사용자 컨트롤에 대처하고 포스트 백없이 비동기 전송을 수행 할 수 있도록 양식이 필요합니다. 나는 그 교량들을 건너 갈 것이다. 그러나 나는 그들에게 다가 갈 것이다. 그러나 나는 지금 그것을 언급한다. 그래서 어떤 대답도이 기능을 배제하지 않을 것이다.

감사합니다.

+0

사용자 정의 컨트롤이란 무엇입니까? 구식 ASP.NET 컨트롤 (runat = server) 또는 부분 클래스? –

+0

mvc partials (System.Web.Mvc.ViewUserControl)를 의미합니다. – Nigel

답변

1

데이터 바인딩을 사용하려면 텍스트 필드에 특별한 이름을 지정해야합니다. ChildControl1의 예를 들면 다음과 같습니다

<%= Html.TextBox("ViewModel1.Property1", Model.Property1) %> 

이 다음과 같은 마크 업 생성합니다

<input type="text" name="ViewModel1.Property1" id="ViewModel1_Property1" value="" /> 

을 그리고 당신은 다음과 같은 행동을 게시 할 때 :

public ActionResult Save(ParentViewModel viewData) 
{ 
    ... 
} 

viewData.ViewData1.Property1의 값을 업데이트합니다. 바인딩 콜렉션의 경우 this article을 살펴보십시오.

+0

대단히 감사합니다. 지금 내가보기에는 분명해 보인다. :) – Nigel