2009-06-07 11 views

답변

3

MyType의 이름이 Name 인 문자열 속성이 있다고 가정하면 확인란의 이름을 가져옵니다. 서버에서 쉽게 구별 할 수 있도록이 글자를 MyType으로 시작하도록 변경했습니다. 어떤 필드가 확인란인지 확인하는 다른 방법이있는 경우이 단계가 필요하지 않을 수 있습니다.

<% foreach (var pair in model.ChecboxDictionary) { %> 
    <%= Html.CheckBox("MyType." + pair.Key.Name, pair.Value) %> 
<% } %> 

컨트롤러 (이 FormParameters를 사용하지만, 당신은 또한 다음 번역하는 Dictionary<string,bool>에 직접 접두사 바인딩 "합니다 MyType을"모델을 시도 할 수 있습니다. 또한 수

public ActionResult MyAction(FormParameters form) 
{ 
    var dict = ... fill dictionary with original values... 
    foreach (var key in dict.Keys) 
    { 
     if (!form.Keys.Contains("MyType." + key.Name)) 
     { 
      dict[key] = false; 
     } 
    } 

    foreach (var key in form.Keys.Where(k => k.StartsWith("MyType."))) 
    { 
     var value = form[key].Contains("on"); // just to be safe 
     // create or retrieve the MyType object that goes with the key 
     var myType = dict.Keys.Where(k => k.Name == key).Single(); 

     dict[myType] = value; 
    } 

    ... 
} 

을, 자바 스크립트의 비트와 함께 클라이언트 측에서 제출하기 전에 각 "확인되지 않은"체크 박스에 대해 name=off 매개 변수를 추가하면 모든 사전 요소 값을 직접 파생시킬 수 있으므로 원래 사전을 채울 필요가 없습니다.

+0

지금까지 나도 알아. 이제 그 데이터를 변경된 부울 값과 함께 컨트롤러로 전달해야합니다. 귀하의 접근 방식은 그것에 대해 작동합니까? 나는 단지 잘못된 것을하고 있거나 그 부분을 포함하지 않습니다. –

+0

알겠습니다. 내 대답을 하나의 아이디어로 업데이트하겠습니다. – tvanfosson

+0

그리고 이것이 모델 바인딩을 작동시키는 방법입니다. 내 애매한 것에 대해 유감입니다. –