복붙노트

[JQUERY] 사용자 지정 특성에 대한 클라이언트 측 유효성 검사를 수행

JQUERY

사용자 지정 특성에 대한 클라이언트 측 유효성 검사를 수행

해결법


  1. 1.여기에 진행 방법은 다음과 같습니다

    여기에 진행 방법은 다음과 같습니다

    사용자 지정 유효성 검사 속성을 정의하여 시작합니다 :

    public class FutureDateAttribute : ValidationAttribute, IClientValidatable
    {
        public override bool IsValid(object value)
        {
            if (value == null || (DateTime)value < DateTime.Now)
                return false;
    
            return true;
        }
    
        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            yield return new ModelClientValidationRule
            {
                ErrorMessage = this.ErrorMessage,
                ValidationType = "futuredate"
            };
        }
    }
    

    이 IClientValidatable을 구현하는 방법을 알 수 있습니다. 우리가 우리의 모델을 쓰기 다음 :

    public class MyViewModel
    {
        [FutureDate(ErrorMessage = "Should be in the future")]
        public DateTime Date { get; set; }
    }
    

    그런 다음 컨트롤러 :

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View(new MyViewModel
            {
                // intentionally put in the past
                Date = DateTime.Now.AddDays(-1)
            });
        }
    
        [HttpPost]
        public ActionResult Index(MyViewModel model)
        {
            return View(model);
        }
    }
    

    그리고 마지막으로보기 :

    @using (Html.BeginForm())
    {
        @Html.LabelFor(x => x.Date)
        @Html.TextBoxFor(x => x.Date)
        @Html.ValidationMessageFor(x => x.Date)
        <input type="submit" value="OK" />
    }
    

    일어날 수있는 마법의 마지막 부분은 사용자 정의 어댑터를 정의하는 것입니다 :

    <script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
    <script type="text/javascript">
        // we add a custom jquery validation method
        jQuery.validator.addMethod('greaterThan', function (value, element, params) {
            if (!/Invalid|NaN/.test(new Date(value))) {
                return new Date(value) > new Date($(params).val());
            }
            return isNaN(value) && isNaN($(params).val()) || (parseFloat(value) > parseFloat($(params).val()));
        }, '');
    
        // and an unobtrusive adapter
        jQuery.validator.unobtrusive.adapters.add('futuredate', { }, function (options) {
            options.rules['greaterThan'] = true;
            options.messages['greaterThan'] = options.message;
        });
    </script>
    

  2. 2.귀하의 질문은 질문 이후하면서 조금을했다,하지만 경우 여전히 메타 데이터와 같은, 당신은 당신이 다음과 같은 주석을 사용하여 문제를 해결할 수, 여전히 단순화 대안 열려있어 :

    귀하의 질문은 질문 이후하면서 조금을했다,하지만 경우 여전히 메타 데이터와 같은, 당신은 당신이 다음과 같은 주석을 사용하여 문제를 해결할 수, 여전히 단순화 대안 열려있어 :

    [Required]
    [AssertThat("Date > Now()")]
    public DateTime? Date { get; set; }
    

    상자의 서버와 클라이언트, 아웃 - 그것은 모두를 위해 작동합니다. 자세한 내용 ExpressiveAnnotations 라이브러리를보십시오.

  3. from https://stackoverflow.com/questions/4747184/perform-client-side-validation-for-custom-attribute by cc-by-sa and MIT license