내 필요 '바인딩'의 asp.net MVC에서 체크 박스의 목록ASP.NET MVC를 사용하여 사전을 체크 박스 세트에 바인딩하려면 어떻게해야합니까?
Dictionary<MyType, bool>
이다.
그 방법을 혼동합니다. 누구든지 나를 도울 수 있을까?
내 필요 '바인딩'의 asp.net MVC에서 체크 박스의 목록ASP.NET MVC를 사용하여 사전을 체크 박스 세트에 바인딩하려면 어떻게해야합니까?
Dictionary<MyType, bool>
이다.
그 방법을 혼동합니다. 누구든지 나를 도울 수 있을까?
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
매개 변수를 추가하면 모든 사전 요소 값을 직접 파생시킬 수 있으므로 원래 사전을 채울 필요가 없습니다.
지금까지 나도 알아. 이제 그 데이터를 변경된 부울 값과 함께 컨트롤러로 전달해야합니다. 귀하의 접근 방식은 그것에 대해 작동합니까? 나는 단지 잘못된 것을하고 있거나 그 부분을 포함하지 않습니다. –
알겠습니다. 내 대답을 하나의 아이디어로 업데이트하겠습니다. – tvanfosson
그리고 이것이 모델 바인딩을 작동시키는 방법입니다. 내 애매한 것에 대해 유감입니다. –