2013-05-06 2 views
0

보기 모델에 사용하는 편집기 템플릿이 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에 문자열을 수동으로 설정하면 부모보기 모델이 속성 이름을 나타내도록 설정할 수 있지만 성 가시고 오류가 발생하는 것으로 보입니다. 이것에 대한 더 나은 접근법이 있습니까?

+0

이것은 최근에 물어 본 질문과 매우 유사합니다. http://stackoverflow.com/questions/16204288/razor-form-with-editable-collection-using-partial-with-knockout-template-integra/16385935# 16385935. 정확한 것은 아니지만 어쩌면 일부 응용 프로그램을 얻을 수 있습니다. –

답변

0

경로 값을 얻기 위해 ViewData.TemplateInfo.HtmlFieldPrefix을 사용할 수 있다는 것을 알았습니다. 내가 그 다양한 분야에 접두사로 내 자바 스크립트에서 그 변수를 사용할 수 있습니다

var contentFeeModelPrefix = ""; 
if ("@ViewData.TemplateInfo.HtmlFieldPrefix" != "") { 
    contentFeeModelPrefix = "@ViewData.TemplateInfo.HtmlFieldPrefix" + "."; 
} 

: 같은

그래서 내 코드는 지금 보인다.

관련 문제