2011-08-17 1 views
2

각 입력란에는 datepicker가 필요하며 그 중 아무 것도 필요하지 않지만 입력 한 경우 필드 1이 더 낮아야합니다 (최신). 다른 것보다. 한 datetime의 유효성 검사가 다른 datetime clientside보다 새로운 경우 및 실패한 경우 게시 경고

그래서 내가 http://webcloud.se/log/Form-validation-with-jQuery-from-scratch/을 발견하지만 난이 일을하는 방법을 알아낼 어차피, 나는 이것은 다음

의 일부인이 HTML

   <div id="ExpectedReturn"> 
        <div class="editor-label"> 
         @Html.LabelFor(m => m.Resource.ExpectedReturn) 
        </div> 
        <span class="editor-field"> 
         @Html.TextBoxFor(m => m.ExpectedReturn.Date, new { @Id = "resource_datereturn", @class = "datepicker", maxlength = "10" }) 
         @Html.TextBoxFor(m => m.ExpectedReturn.Hour, new { @Id = "resource_hour", maxlength = "2" }) 
         : 
         @Html.TextBoxFor(m => m.ExpectedReturn.Minute, new { @Id = "resource_minute", maxlength = "2" }) 
        </span> 
        <span> 
         @Html.ValidationMessageFor(m => m.ExpectedReturn.Date) 
         @Html.ValidationMessageFor(m => m.ExpectedReturn.Hour) 
         @Html.ValidationMessageFor(m => m.ExpectedReturn.Minute) 
        </span> 
       </div> 
       <div id="DateIn"> 
        <div class="editor-label"> 
         @Html.LabelFor(m => m.Resource.DateIn) 
        </div> 
        <span class="editor-field"> 
         @Html.TextBoxFor(m => m.DateIn.Date, new { @Id = "resource_datein", @class = "datepicker", maxlength = "10" }) 
         @Html.TextBoxFor(m => m.DateIn.Hour, new { @Id = "resource_hour", maxlength = "2" }) 
         : 
         @Html.TextBoxFor(m => m.DateIn.Minute, new { @Id = "resource_minute", maxlength = "2" }) 
        </span> 
        <span> 
         @Html.ValidationMessageFor(m => m.DateIn.Date) 
         @Html.ValidationMessageFor(m => m.DateIn.Hour) 
         @Html.ValidationMessageFor(m => m.DateIn.Minute) 
        </span> 
       </div> 

를 확인하도록되어이 jQuery를

 $('#resource_form').validate({ 
      rules: 
       { 

      DateIn: 
       { 
      check: function() { 
       if($('#resource_datein').val() == '' || $('#resource_dateout').val() == '') { 
        return true; 
       } 
       else if($('#resource_datein').val() < $('#resource_dateout').val()) { 
        return true; 
       } 
       else { 
        return false; 
       } 
      } 
    }, 
     messages: 
      { 
       DateIn:{ 
        check: "Date out must be earlier than returned date" 
      } 

     } 
    } 

}); 

을 생성

@using (Ajax.BeginForm("CreateResource", "Resource", new { }, new AjaxOptions { HttpMethod = "Post", OnSuccess = "systematic_resource.successRequest" }, new { Id = "resource_form" })) 

확실치 않은 점은 내 JQuery에서 DateIn을 만드는 방법입니다. 다시 @did = "resource_datereturn"나는 그것들을 함께 연결해야하는 것을 볼 수 없으므로 그 입력 필드를 확인합니다. http://docs.jquery.com/Plugins/Validation/validate 의사는 꽤 쓸모없는 것처럼 보입니다.

답변

1

나는이 프로젝트에서 어제 이것을했다.

두 가지 사용자 지정 유효성 검사 방법을 추가하십시오.

$.validator.addMethod("validatefromdate", function(value, element) { 
    var parent = $(element).parent(); 

    //since you have the parent element use jQuery to find the other input field 

    return true or false; 
}, " Invalid Date Range"); 

$.validator.unobtrusive.adapters.addBool("validatefromdate"); 

$.validator.addMethod("validatetodate", function(value, element) { 
    var parent = $(element).parent(); 
    //since you have the parent element use jQuery to find the other input field  

    return true or false; 
}, " Invalid Date Range"); 

$.validator.unobtrusive.adapters.addBool("validatetodate"); 

당신은 당신은 또한, 속성과 검증 속성을이 개 클래스의 서버 측이 필요합니다

작업이 방법에 대한 두 개의 입력의 주위에 컨테이너 요소가 필요합니다

public class ValidateFromDateAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
      //validate 
    } 

    public override string FormatErrorMessage(string name) 
    { 
     return string.Format("From date must occur before to date"); 
    } 
} 

검사기

public class ValidateFromDateValidator : DataAnnotationsModelValidator<ValidateFromDateAttribute > 
    { 
     public ValidateFromDateValidator (ModelMetadata metadata, ControllerContext context, ValidateFromDateAttribute attribute) 
      : base(metadata, context, attribute) 
     { 
     } 

     public override IEnumerable<ModelClientValidationRule> GetClientValidationRules() 
     { 

      var rule = new ModelClientValidationRule 
          { 
           ErrorMessage = this.ErrorMessage, 
           ValidationType = "validatefromdate" 
          }; 

      return new[] { rule }; 
     } 
    } 
+0

정말이 코드를 어떻게 구현해야합니까? 캔트 나는 대신 그냥 순수한 JQuery 유효성 검사를합니까? – Mech0z

관련 문제