0

ASP.NET MVC4에서 Razor 뷰를 쓰고 있습니다.반복 EditTemplate에서 동적 컨트롤 만들기

표시 할 개체 목록이 있습니다. 현재 데이터 모델 목록에 대해 정의 된 EditTemplate을 사용하여 @ Html.EditorFor()를 사용하고 있습니다.

먼저 편집 템플릿에서 jquery를 사용하여 컨트롤을 표시/숨기고 싶지만 스크립트가 어디에 (예 : 편집 템플릿에서) 살아야하는지 잘 모르겠습니다. 어떻게 관련 컨트롤 만 선택할 수 있는지 편집 템플릿의 현재 반복

다음 컨트롤의 새 인스턴스 (아마도 AJAX를 통해?)를 생성하는 추가 단추를 클라이언트 측의 목록에 추가하고 싶습니다.

아무도 이런 식으로 아무것도하지 않았습니까? 컨트롤이나 뭔가의 클래스에 넣을 수 있도록 템플릿 내부에서 반복 횟수를 얻을 수있는 방법이 있습니까? jquery에서 컨트롤 상태를 전환 할 수 있도록 선택할 수 있어야합니다.

주 화면에서 :


코드는 다음과 같이 보이는

@Html.EditorFor(vm => vm.ListOfChildViewModels) 
<button type="button" class="btn" id="btnAddViewModel">Add view model</button> 

EditorTemplate :

@MyNamespace.Web.ViewModels.VMType 

@Html.DropDownListFor(vm => vm.SelectorProperty, Model.SelectorOptions) 

// This checkbox should only get displayed if the dropdown has selectedIndex == 0 
@Html.CheckBoxFor(vm => vm.Option1) 

// This checkbox should only get displayed if the dropdown has selectedIndex == 1 
@Html.CheckBoxFor(vm => vm.Option2) 

// Etc... 
+0

Google에서이 문제에 대한 답변을 검색하는 동안 ViewData.TemplateInfo.HtmlFieldPrefix에 걸쳐 있어야합니다. 아마도이 문제를 해결하기 위해이 방법을 사용할 수 있지만이 시나리오를 해결하는 방법에 대한 좋은 패턴/계획이 있는지 궁금해합니다. –

답변

0

은 무거운를 유지하기 위해 처리 서버 쪽을하고 종료 됨 그곳에. ID는 EditTemplate을 통해 처음으로 자동 생성됩니다. 목록에서 추가/제거해야 할 때마다 직렬화 된 양식을 AJAX 호출로 서버에 전달합니다. 그런 다음 서버는 요청을 변경하고 jquery를 사용하여 클라이언트 측에서 교환 할 수있는 목록의 렌더링 된 HTML을 전달합니다.

이 문제를 해결하기 위해 클라이언트 측 바인딩을 사용할 수 있었지만 서버에서 C#을 테스트하고 컴파일하는 것이 안전합니다. 불행히도, 비용은 서버로의 왕복이며 목록을 업데이트하기위한 것입니다.