1

양식에 숨겨진 필드가 필요합니다. 숨겨진 필드는 사용자가 jQuery UI 자동 완성을 사용하여 텍스트 상자에서 값을 선택할 때 채워집니다. 검증이 실제로 작동하도록 숨겨진 필드를 무시하지 않도록 양식 유효성 검사기를 설정했습니다. 유효성 검사는 작동하지만 사용자가 자동 ​​완성에서 원하는 옵션을 선택하면 숨겨진 필드가 채워지고 유효성 검사 메시지는 지워지지 않고 양식이 게시 될 때까지 표시됩니다. 숨겨진 필드가 설정되면 수동으로 $('form').validate() 또는 무언가를 호출해야합니까? 아니면 여분의 자바 스크립트 코드없이 이것을 지울 수있는 방법이 있습니까?ASP.NET MVC4 - 값을 설정 한 후에 숨겨진 필드 유효성이 지워지지 않습니다.

내보기 모델 :

public class IndexViewModel 
{ 
    public string SchoolName { get; set; } 
    [Required] 
    public int SchoolId { get; set; } 
} 

내보기 : 미리

@model IndexViewModel 

@using (Html.BeginForm()) 
{ 
    <p> 
     @Html.LabelFor(m => m.SchoolName) 
     @Html.TextBoxFor(m => m.SchoolName) 
     @Html.HiddenFor(m => m.SchoolId) 
     @Html.ValidationMessageFor(m => m.SchoolId) 
    </p> 

    <p> 
     <input type="submit" /> 
    </p> 
} 

@section scripts { 
    <script> 
     $(function() { 
      // stop validator from ignoring hidden fields 
      var validator = $('form').data('validator'); 
      validator.settings.ignore = ""; 

      // schoolname autocomplete 
      $('#SchoolName').autocomplete({ 
       minLength: 1, 
       source: [ 
        { label: "ABC University", value: "1" }, 
        { label: "Oklahoma University", value: "2" }, 
        { label: "Texas University", value: "3" } 
       ], 
       select: function (e, ui) { 
        e.preventDefault(); 
        $('#SchoolId').val(ui.item.value); 
        $('#SchoolName').val(ui.item.label); 
       } 
      }); 
     }); 
    </script> 
} 

감사합니다. 정상적인 검증 중에 숨겨진 필드에 트리거하지 있기 때문에 오류 메시지가 계속

<form action="/" method="post"> 
    <p> 
     <label for="SchoolName">SchoolName</label> 
     <input id="SchoolName" name="SchoolName" type="text" value="" /> 
     <input data-val="true" data-val-number="The field SchoolId must be a number." data-val-required="The SchoolId field is required." id="SchoolId" name="SchoolId" type="hidden" value="" /> 
     <span class="field-validation-valid" data-valmsg-for="SchoolId" data-valmsg-replace="true"></span> 
    </p> 
    <p> 
     <input type="submit" /> 
    </p> 
</form> 
+0

[this] (http://stackoverflow.com/questions/7790478/client-side-validation-not-working-for-hidden-field-in-asp-net-mvc-3) 너를 도울거야. –

+0

브라우저에 표시되는 양식의 _rendered_ HTML을 표시해야합니다. – Sparky

답변

1

그 이유는 다음과 같습니다


편집

스파키, 여기에 렌더링 된 HTML이다. 일반적으로 단일 필드의 경우 키 입력 또는 흐림 효과에 대한 유효성 검사가 트리거됩니다. 필드가 숨겨져 있기 때문에 전체 양식의 유효성을 검사 할 때 제출 버튼 만 숨겨진 필드의 유효성 검사를 트리거합니다.

그러나 언제든지 .valid() 메서드를 호출하여 모든 필드에서 유효성 검사 테스트를 프로그래밍 방식으로 트리거 할 수 있습니다. http://jsfiddle.net/LJzfu/

  • 클릭 값이없는 field2라는 숨겨진 입력의 "요구"메시지를 표시하는 '제출': 여기

    $('input[name="field"]').valid(); // force validation of 'input name="field"' 
    

    는 원유 jsFiddle 데모입니다.

  • "go"버튼을 클릭하면 숨겨진 입력 값이 프로그래밍 방식으로 입력됩니다. 양식은 이제 기술적으로 유효성 검사를 통과하지만 (제출시) 유효성 검사 트리거가 없으므로 오류 메시지가 계속 표시됩니다.

  • 숨겨진 필드에 값을 넣은 직후 .valid()을 호출하여 유효성 검사를 트리거합니다. 이렇게하면 숨겨진 필드의 유효성 검사가 강제로 수행되고 오류 메시지가 숨겨집니다 (유효성 검사 규칙이 충족되는 한).

+0

매력처럼 작동했습니다. 전화 할 방법이 확실하지 않으므로 올바른 방향으로 나를 가리켜 주셔서 감사합니다! – ryanulit