繁体   English   中英

一个月的最后一天的自定义验证器 - c#

[英]custom validator for last day of a month - c#

我是asp.net的新手,所以请跟我说:我想创建一个自定义验证器来检查文本框(具有日历扩展名(AJAX))中给出的输入日期是一个月的最后一天还是不。 这是我试图做的:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs e)
{

    DateTime dt = Convert.ToDateTime(e.ToString("dd/MMM/yyyy"));
    DateTime lastOfMonth = new DateTime(dt.Year, dt.Month, 1).AddMonths(1).AddDays(-1);
    if (dt == lastOfMonth)
    {
        e.IsValid = true;
    }
    else
    {
        e.IsValid = false;
    }

}

我认为问题是我处理对象'e'的方式。 任何帮助都是非常明确的。 非常感谢提前!

你是对的。 e不是日期,它是ServerValidateEventArgs一个实例。 你应该从那里得到Value属性。 Value是一个字符串,您需要将其转换为日期时间,然后进行验证。

DateTime dt;
if (DateTime.TryParseExact(e.Value, "dd/MMM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) 
{
    // validation of dt here.
}

您需要知道日期在解析中的格式,因此我建议使用DateTime.TryParseExact 您还需要传递正确的文化,即格式化日期,因为解析规则依赖于此 - 特别是在这种情况下,您将MMM作为模式的一部分,因为不同文化之间会有所不同。

通常,在解析来自用户输入的日期或数字时,应使用TryParse系列方法。 这些不会失败,但会返回false。 如果返回值为false,则解析失败,在这种情况下,您应该验证失败。

我有一些扩展方法,你可以看看哪些将允许你返回该月的最后一天并比较两个日期...

他们是开源的... http://zielonka.codeplex.com/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace zielonka.co.uk.extensions.system
{
    //DateTime lastDay = DateTime.Now.GetLastDateTimeOfMonth();

    public static partial class DateTimeExtensions
    {
        public static DateTime GetLastDateTimeOfMonth(this DateTime dateTime)
        {
            return new DateTime(dateTime.Year, dateTime.Month, 1).AddMonths(1).AddDays(-1);
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM