使用ASP.NET MVC 3.0进行日期验证

时间:2011-06-06 10:39:11

标签: asp.net-mvc asp.net-mvc-3

我的MVC UI上的Date字段名为“startDate”,用户使用jquery日期选择器选择日期。因为我想验证所选日期不应该是过去2个月和未来2个月。

我写了下面的代码来验证日期。

 public sealed class DateAttribute : DataTypeAttribute
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailAddressAttribute"/> class.
        /// </summary>
        public DateAttribute() : base(DataType.Date)
        {
        }

        /// <summary>
        /// Checks that the value of the data field is valid.
        /// </summary>
        /// <param name="value">The data field value to validate.</param>
        /// <returns>
        /// true always.
        /// </returns>
        public override bool IsValid(object value)
        {
            DateTime inputDate = Convert.ToDateTime(value, CultureInfo.CurrentCulture);

            if (inputDate.Date >= DateTime.Now.Date.AddMonths(-2) && inputDate.Date <= DateTime.Now.Date.AddMonths(2))
                return true;

            return false;
        }
    }

但问题是,它用于验证日期字段的服务器。我怎样才能与客户验证相同。

谢谢, -Naren

3 个答案:

答案 0 :(得分:0)

限制datepicker上的可用日期是否足够?

使用jquery ui的datepicker,使用minDate和maxDate选项非常简单,其他大多数都有类似的功能。

答案 1 :(得分:0)

function IsValid(object) {  
    var theDate = new Date(object);  
    var pointfrom = (theDate.getFullYear() * 100) + (theDate.getMonth());  
    var today = new Date();  
    if (pointfrom > (today.getFullYear() * 100) + (today.getMonth()) + 2) return false;  
    if (pointfrom < (today.getFullYear() * 100) + (today.getMonth()) - 2) return false;  
    return true;  
 } 

我将年份提高了100,从而避免了跨年度比较

然后在你的SPAN id =“x”onBlur =“IsValid(this.value)”&gt; 2001-01-01

麦克

答案 2 :(得分:-7)

您是否尝试过使用System.ComponentModel.DataAnnotations属性中的标准Range validator?类似的东西:

[Range(typeof(DateTime), 
    DateTime.Now.Date.AddMonths(-2).ToShortDateString(), 
    DateTime.Now.Date.AddMonths(2).ToShortDateString(), 
    ErrorMessage = "Value for {0} must be between {1} and {2}")]
public DateTime StartDate { get; set; }

值得一试!