【问题标题】:Client side custom Validation for date range in mvc4mvc4中日期范围的客户端自定义验证
【发布时间】:2023-04-05 17:40:01
【问题描述】:

我正在尝试验证 18 岁以上的年龄,这是在服务器端验证上工作,但它在客户端不工作,我不知道该怎么做。 我看过文章,但没有用。

  1. 我在服务器端 C# 中实现了逻辑。
  2. 我是否也需要在客户端 jQuery/JavaScript 中实现相同的逻辑。

我的后端代码是

  public class ValidateAge : ValidationAttribute
{
    public ValidateAge( params string[] propertyNames)
    {
        this.PropertyNames = propertyNames;
    }


    public string[] PropertyNames { get; private set; }
    public int MinLength { get; private set; }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        DateTime date = Convert.ToDateTime(value, System.Globalization.CultureInfo.InvariantCulture);
        if (DateTime.Compare(date, DateTime.Now.AddYears(-18)) == -1 || DateTime.Compare(date, DateTime.Now.AddYears(-18)) == 0)
        {
            return ValidationResult.Success;
        }
        else
        {
            return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName));
        }


    }
}

在模型中是这个

[Required(ErrorMessage="Date of birth is required.")]
  [ValidateAge(ErrorMessage="Age must be above 18.")]
  [DataType(DataType.Date)]
  public DateTime _Dob { get; set; }

它是验证模型,但不显示服务器端或客户端的错误消息,我试过了

jQuery.validator.unobtrusive.adapters.add but no one explained how to use it 
 i dont know how to make it work 

感谢任何帮助。

【问题讨论】:

  • 你必须使用远程验证。
  • 你能告诉我它是如何工作的吗?
  • 你也可以使用jqury函数。这个链接用于远程验证http://www.c-sharpcorner.com/UploadFile/d87001/remote-validation-in-mvc/
  • 我应用了相同的方法,但现在表单甚至没有回发,[HttpGet] [AllowAnonymous] public ActionResult ValidateAge(String dt) {} model [Remote("ValidateAge","Account",ErrorMessage ="年龄必须在 18 岁以上。")]
  • 我在网络检查中发现它实际上正在工作,但问题是我使用日历控制时,当我使用日历输入时它不起作用但是当我使用手动输入时它工作,现在问题我希望它与日历控件一起使用吗?

标签: c# jquery validation asp.net-mvc-4


【解决方案1】:

您也可以使用此链接http://www.c-sharpcorner.com/UploadFile/d87001/remote-validation-in-mvc/ 进行远程验证。

OR

您可以在单击按钮时使用此 Javascript 函数进行日期验证。

 Date.prototype.age = function (at) {
        var value = new Date(this.getTime());
        var age = at.getFullYear() - value.getFullYear();
        value = value.setFullYear(at.getFullYear());
        if (at < value)--age;
        return age;
    };

var dob = new Date(Date.parse($(this).text()));

if (dob.age(new Date()) < 18) {
  $(this).text("Under 18");
}
else {
   $(this).text(" Over 18");
}

【讨论】:

  • 我使用了远程验证,并在文本框模糊事件上使用 ajax 调用了操作,它可以正常工作。上面的答案有一些错误,我很难在 javascript 中做逻辑,所以我没有更进一步。问题包括比较日期,以及从日、月、年 j 参数中获取日期,那么可能是本地化/格式问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2015-03-26
相关资源
最近更新 更多