[英]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.