asp.net mvC语言 日期时间要求(+18年)



我有一个小问题,这是我的代码:

public partial class Tourist
    {
        public Tourist()
        {
            Reserve = new HashSet<Reserve>();
        }
        public int touristID { get; set; }
        [Required]
        [StringLength(50)]
        public string touristNAME { get; set; }
        public DateTime touristBIRTHDAY { get; set; }
        [Required]
        [StringLength(50)]
        public string touristEMAIL { get; set; }
        public int touristPHONE { get; set; }
        public virtual ICollection<Reserve> Reserve { get; set; }
    }
}

我如何限制游客的生日为+18岁?我想我必须使用这个函数,但我不知道把它放在哪里:注意:这个函数只是一个例子。

DateTime bday = DateTime.Parse(dob_main.Text);
DateTime today = DateTime.Today;
int age = today.Year - bday.Year;
if(age < 18)
{
    MessageBox.Show("Invalid Birth Day");
}

谢谢,)

更新:我遵循Berkay Yaylaci的解决方案,但我得到一个NullReferenceException。似乎我的值参数是默认的,然后我的方法是不张贴,为什么?这个问题的解决方法是什么?

您可以编写自己的验证。首先创建一个类。

我调用了MinAge.cs

 public class MinAge : ValidationAttribute
    {
        private int _Limit;
        public MinAge(int Limit) { // The constructor which we use in modal.
            this._Limit = Limit;
        }
        protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
        {
                DateTime bday = DateTime.Parse(value.ToString());
                DateTime today = DateTime.Today;
                int age = today.Year - bday.Year;
                if (bday > today.AddYears(-age))
                {
                   age--; 
                }
                if (age < _Limit)
                {
                    var result = new ValidationResult("Sorry you are not old enough");
                    return result; 
                }
               
            
            return null;
        }
    }

SampleModal.cs

[MinAge(18)] // 18 is the parameter of constructor. 
public DateTime UserBirthDate { get; set; }

IsValid在post后运行并检查Limit。如果age不大于Limit(我们在modal中给出的),则返回ValidationResult

在你的旅游类上实现IValidatableObject。

将逻辑放入Validate()方法中。

你正在使用MVC,所以没有MessageBox.Show()。MVC模型绑定器将自动调用验证例程。

这里是另一个SO问题与细节我如何使用IValidatableObject?

你的年龄逻辑也是错误的。必须是

DateTime now = DateTime.Today;
int age = now.Year - bday.Year;
if (now < bday.AddYears(age)) age--;

相关内容

  • 没有找到相关文章

最新更新