보기 모델에 사용하는 편집기 템플릿이 EditFeeContentViewModel
입니다. 이 뷰 모델에는 JavaScript를 통해 추가/제거 된 컬렉션이 있습니다. 나는 바인딩 모델이 작동 할 수 있도록 새로운 항목이 추가 될 때마다 대한 microtemplating를 통해 다음과 같은 HTML을 추가 해요 :편집기 템플릿에 중첩 된 컬렉션 바인딩 모델
<script id="feeContentTemplate" type="text/html">
<tr id='RowContentId<%= ContentId%>'>
<td>
<input type="hidden" name="ContentFeeViewModels.Index" value="<%= ContentId%>"/>
<input type="hidden" name="ContentFeeViewModels[<%= ContentId%>].ContentId" value="<%= ContentId%>" />
<%= ContentId%>
</td>
<td><input type="hidden" name="ContentFeeViewModels[<%= ContentId%>].ContentName" value="<%= ContentName%>" />
<%= ContentName%>
</td>
<td><input type="text" name="ContentFeeViewModels[<%= ContentId%>].Allocation" value="<%= Allocation%>" /></td>
<td><input type="text" name="ContentFeeViewModels[<%= ContentId%>].Comments" value="<%= Comments%>"/></td>
<td><a href="javascript:removeContentRow('#RowContentId<%= ContentId%>')">Remove</a></td>
</tr>
</script>
지금이 내 시야 모델이 중첩되지 않는 경우에 작동합니다. 컨트롤러에 제출하고 모든 데이터를 그대로 유지합니다.
그러나 중첩 된 경우 이름이 더 이상 정확하지 않으며 모델 바인딩이 실패합니다. ContentFeeViewModels.Index
대신 FeeContents.ContentFeeViewModels.Index
이 필요할 수 있습니다.
JavaScript를 통해 이루어 지므로 HTML 생성기를 사용하여 이름을 올바르게 생성하는 방법을 알 수 없습니다. 뷰 모델이 중첩되어 있는지 여부 및 모델 바인딩이 올바르게 수행되도록 위치를 나타내는 문자열을 생성하는 방법을 어떻게 알 수 있습니까?
EditFeeContentViewModel
에 문자열을 수동으로 설정하면 부모보기 모델이 속성 이름을 나타내도록 설정할 수 있지만 성 가시고 오류가 발생하는 것으로 보입니다. 이것에 대한 더 나은 접근법이 있습니까?
이것은 최근에 물어 본 질문과 매우 유사합니다. http://stackoverflow.com/questions/16204288/razor-form-with-editable-collection-using-partial-with-knockout-template-integra/16385935# 16385935. 정확한 것은 아니지만 어쩌면 일부 응용 프로그램을 얻을 수 있습니다. –