2011-02-11 2 views
3

모델 :양식 및 목록과 MVC 3 : 기본 모델 바인더 및 EditorFor

public class MyObject 
{ 
    public IList<Entry> Entries; 
} 

public class Entry 
{ 
    public string Name { get; set; } 
} 

내가 기본 EditorFor (모델 => model.Entries) 이름을 사용하는 경우/ID 값은 다음과 같습니다

<input type="text" value="" name="Entries[0].Name" id="Entries_0__Name"> 
나는이 같은 EditorFor 템플릿을 만들려면 대신하는 경우

:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<CMS.Models.MyObject>>" %> 

<div class="list"> 
<% 
    for (int i = 0; i < Model.Count; i++) 
    { %> 
    <div class="object" id="<%: i %>"> 
     <%: Html.EditorFor(model => Model[i]) %> 
     <%: Html.ValidationMessageFor(model => Model[i]) %> 
    </div> 
<% } %> 
</div> 

방출 된 이름/ID 값은 다음과 같습니다

<input type="text" value="" name="Entries.[0].Name" id="Entries__0__Name"> 

따라서 이름에는 속성 이름과 [0] 사이에 마침표가 있고 id에는 인덱스 번호의 왼쪽에 추가 밑줄이 있습니다. 기본 모델 바인더에서는 작동하지 않습니다. 기본 모델 바인더에서 작동하는 방법이 있습니까?

+1

왜이 작업을 수행 하시겠습니까? 유효성 검사 메시지가 포함되어 있는지 찾고 계시지 않습니까? 아니면 ID 태그가 설정된 div 태그가 있어야합니까? –

+0

목록의 끝에 다른 요소를 추가하기 위해 일반 jQuery 기반 "추가"옵션을 가질 수 있도록이 작업을 수행하고 있습니다. 해당 HTML로 목록을 내보내는 것은 "추가"제네릭을 훨씬 쉽게 만듭니다. 하나의 섹션이 N 개의 참조를 필요로하는 양식 (각각의 참조는 다중 속성을 가짐), 다른 부분은 다른 것에 대해 N 개의 세부 사항을 필요로하는 양식 (각 부분은 여러 속성이 있음) 등을 생각해보십시오. – Cymen

답변

3

나는 모델 바인더에 문제가있는 것으로 보이는 목록을 명시 적으로 반복하지 않아도 템플릿을 사용하여 대부분이 작업을 수행 할 수 있다고 생각합니다.

시도하고 이러한 공유 편집기 템플릿 :

MyObject를 편집기 템플릿

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMS.Models.MyObject>" %> 

<div class="list"> 
    <%: Html.EditorFor(m => m.Entries) %> 
</div> 

항목 편집기 템플릿

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMS.Models.Entry>" %> 

<div class="object" id="<%: ??? %>"> 
    <%: Html.EditorFor(m => m.Name) %> 
    <%: Html.ValidationMessageFor(m => m.Name) %> 
</div> 

나는 아직 파악하지 않은 유일한 것은이 div의 id 속성에서 올바른 값을 얻는 방법, 따라서 ques 표시. 마지막주의 사항은 내가 집에있어 실제로 이것을 시도하지 않았다는 것입니다.

+0

이 작업으로 이드를 벗어날 수있었습니다. 내가 필요한 것을 성취해라. 나는 어쨌든 (실제로 여러 개의 목록을 가지고 있다면 중복 된 id를 가질 수있다) 결국에는 잘못된 HTML이라고 생각한다. 감사! – Cymen

+0

신난다, 내가 도울 수 있기 때문에 기쁘다! –

+0

가장 도움이되고 깨끗하며 간단합니다. 감사! – Menahem