0

내가 그들에게 그런 식으로 유효성을 검사 할, 3 확인란을 얻었다.MVC 3 체크 박스 검증

컨트롤러 값이 대신 체크 박스의 라디오 버튼을 사용하는 것이 좋습니다 상호 배타적 인 경우

public ActionResult SolarPart() 
    { 
     var model = new SolarParentViewModel(); 
     var list = new List<URLTimeLimitViewModel>(); 
     list.Add(new URLTimeLimitViewModel { Name = "14 dage", IsChecked = false, Id = 1 }); 
     list.Add(new URLTimeLimitViewModel { Name = "1 Måned", IsChecked = false, Id = 2 }); 
     list.Add(new URLTimeLimitViewModel { Name = "2 Måneder", IsChecked = false, Id = 3 }); 
     model.TimeLimit = list; 
     return View(model); 
    } 

보기

@for (var i = 0; i < Model.TimeLimit.Count; i++) 
{ 
    <div class="editor-label"> 
    @Html.LabelFor(c=>Model.TimeLimit[i].Name, Model.TimeLimit[i].Name) 
     @Html.HiddenFor(c=>Model.TimeLimit[i].Id) 
     @Html.CheckBoxFor(c=>Model.TimeLimit[i].IsChecked) 
    </div> 
} 

답변

4

. 그들은 당신의 시나리오에 더 적응 된 것처럼 보입니다. 아주 이상한 이유가 있다면 상호 배타적 인 체크 박스를 사용하고 싶다면 자바 스크립트를 사용하고 각각의 변경 이벤트를 구독하고 값에 따라 다른 2 개의 체크 박스를 토글 할 수 있습니다. 다음

public class MaximumOneTimeLimitCanBeCheckedAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     var list = value as IEnumerable<URLTimeLimitViewModel>; 
     if (list == null) 
     { 
      return true; 
     } 
     return list.Where(x => x.IsChecked).Count() < 2; 
    } 
} 

과 : : 그리고 서버에서이 모델의 유효성을 확인하는 당신도 당신의보기 모델에 TimeLimit 속성에 적용 할 수있는 사용자 지정 유효성 검사 속성을 쓸 수

public class SolarParentViewModel 
{ 
    [MaximumOneTimeLimitCanBeChecked] 
    public IList<URLTimeLimitViewModel> TimeLimit { get; set; } 
} 
+0

아, 그건 정말이었다 바보 같은 질문을해서 미안 해요. – Timsen