"PropertyFeature"라는 클래스가 있습니다. 단순히 "PropertyFeatureID"와 Description이 있습니다. LINQ to SQL을 통해 SQL Server 데이터베이스 테이블에 매핑 된 적절한 모델입니다. 예 인스턴스/행은 다음과 같습니다ASP.NET MVC의 동적 체크 박스 상태 유지
PropertyFeatureID: 2
Description: "Swimming Pool"
행 (PropertyFeatures)의 수는 물론 성장하고 축소 할 수 있으며, 그래서 사용자가 그 중 하나를 선택할 수 있도록 동적으로 체크 박스의 목록을 렌더링 할 수 있습니다. 좋은 작품 - 사용자가 직관적으로 체크 박스를 레이블을 클릭하고 전환 할 수 있도록 내가 각 체크 박스의 ID를 지정하고 일치하는 레이블을 렌더링하는
<%foreach (var Feature in (ViewData["Features"] as IEnumerable<MySolution.Models.PropertyFeature>)) { %>
<%=Html.CheckBox("Features", new { @id = Feature.PropertyFeatureID, @value = Feature.PropertyFeatureID })%><label for="Feature<%=Feature.PropertyFeatureID%>"><%=Feature.Description%></label>
<%}%>
: 는 동적으로 같은과, 충분히 쉽게 체크 박스를 렌더링 할 수 .
CheckBox의 "이름"을 "기능"으로 설정하면 모든 확인란이 같은 이름으로 렌더링되고 MVC 모델 바인더는 양식이 게시 될 때 "기능"이라는 단일 모음으로 파일을 쌓습니다. 이것은 잘 작동합니다.
일단 양식이 제출되면 확인 된 값을 사용하고 저장하므로 실제 정수 값이 필요하므로 어떤 Boomer 및 필드 이름이 아닌 PropertyFeature를 선택해야합니다. 따라서 이상적으로는 배열이나 컬렉션과 같이 작업하기 쉽습니다.
매개 변수를 int [] 기능으로 지정했기 때문에 단추를 클릭하면 내 컨트롤러 메서드 내에서 선택한 값을 검색 할 수 있습니다.
그러나 문제은 상태를 유지 관리하지 않는다는 것입니다. 즉, 제출 버튼을 클릭하고 페이지가 다시로드 된 상태에서 폼이 다시 표시되면 모든 동적 체크 박스에 체크 된 상태가 유지되기를 원합니다. Html.DropDownList
과 Html.TextBox
으로 만든 다른 모든 필드는 모두 동일한 양식의 같은 페이지에서 전혀 상태를 유지합니다.
비슷한 문제에 대한 다른 스레드와 기사를 모두 읽는 데 많은 시간이 걸렸으며 ICollection
및 IDictionary
을 사용하여 항목을 묶어서 각 항목에 부울 값을 포함하여 확인란을 유지할 수 있다는 이야기가 많이있었습니다. 상태. 그러나 나는 100 % 자신의 개인적인 사례의 맥락에서 그것을 사용하는 방법을 이해하지 못합니다. 솔루션을 정말 간단하게 유지하고 싶습니다. 그리고 체크 박스 상태를 유지하기 위해 새로운 클래스의 페이지를 코딩 할 필요가 없습니다.
이것을 수행하는 가장 깨끗하고 적절한 방법은 무엇입니까?
문제는 게시물 다음에보기를 다시 렌더링 할 때입니다. 바인더는 "Features"라는 입력에 대해 게시 된 값을 찾습니다. 이것은 배열이 될 것이므로 첫 번째 인덱스에서만 작동하는지 궁금합니다. 첫 번째 체크 박스가 상태를 유지할 수 있는지 테스트 할 수 있습니까? 이 경우, 아마도 좀 더 복잡한리스트 바인딩을 조사해야 할 것입니다. – dotjoe
맞습니다. 실제로, 나는 그것이 첫번째 체크 박스조차를 위해조차 전혀 작동하지 않는다는 것을, 생각한다. List 바인딩 접근법으로 좀 더 놀았으며 훨씬 더 유망한 것으로 보인다. 그러나 여전히 조금 복잡한 데다가 아직 최고의 솔루션을 잠글 수 없었습니다. – Aaron