2011-11-22 2 views
7

MVC3의 editorFor 도우미와 관련하여 이상한 문제가 있습니다. 여기에 문제가 있습니다 : 나는 checkboxList를 표시하려고하는데 템플릿 이름을 explicity로 호출하지 않으면 작동합니다. 그러나 템플릿 이름을 사용하려고하면 단순히 내 viewModel을 전달해야 할 때 일반 목록을 전달하려고한다는 예외를 throw합니다. 나는 더 이해할 수 있도록 몇 가지 코드를 보여 드리겠습니다 :asp.net-mvc3 Editor 템플릿 이름 문제

뷰 모델

public class ChkViewModel 
{ 
    public string ContractName {get;set;} 
    public string Contract {get;set;} 
    public bool Checked {get;set;} 
} 

EditorFor 템플릿 (이 ContractTemplate라고합니다) 내보기에서

@model Models.ChkViewModel 
<p> 
    @Html.HiddenFor(x => x.Contract) 
    @Html.LabelFor(x => x.ContractName , Model.ContractName) 
    @Html.CheckBoxFor(x => x.Checked, new { @class = "chkContract" }) 
&nbsp;  
</p> 

발췌

<div id="contractContainer"> 
    @Html.EditorFor(item=>item.ContractList) 
</div> 

이 작동합니다. 그러나이 작업을 수행하려고 :

<div id="contractContainer"> 
    @Html.EditorFor(item=>item.ContractList, "ContractTemplate") 
</div> 

그것은 내가 간단한 ChkViewModel 아닌 GenericList ChkViewModel을 통과해야한다는 말하는 InvalidOperationException가 발생합니다.

나는 다른 체크 박스 목록을 만들려고했기 때문에 나는 이것을 묻는 것 뿐이다. 체크 박스를 표시하지도 않고 만들 수도 없었고, 템플릿 이름을 설정하려고했을 때 나는 적어도 그렇게 할 수 있었다. 확인란을 보면 오류가 발생했습니다.

<div id="contractContainer"> 
    @for (int i = 0; i < item.ContractList.Count; i++) { 
     @Html.EditorFor(item => item.ContractList[i], "ContractTemplate") 
    } 
</div> 

이 ASP.NET MVC는 처음에 당신을 위해 무대 뒤에서 무엇을하는지 유사합니다

+0

왜 템플릿 이름을 지정 하시겠습니까? – epzee

+0

마지막 단락에서 언급했듯이 이전에는 필요하지 않았지만 다른 예제를 만들려고 시도했을 때 작동하지 않았습니다. 게다가 매개 변수라면 왜 사용하지 않을까요? 내가 사용하고있는 템플릿을 구체적으로 아는 것이 더 낫지 않습니까? – AdrianoRR

답변

6

오류 메시지는 당신이 당신의 템플릿 이름을 사용하고자하는 경우는 다음과 같이해야 정확 case (컬렉션을 반복하고 템플릿을 호출).

+2

이봐 요, 고마워요, 토마스. 하지만 템플릿 이름을 전달하지 않았을 때 첫 번째 예제가 올바르게 작동 한 이유는 무엇입니까? 그것은 기본적으로 같은 체크 박스 목록입니다. 나는 아직도 mvc가 장면 뒤에서하는 것을 얻지 못한다. 그런데 jqGrid 도우미를 계속 개선하기를 바랍니다. – AdrianoRR