3

私は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」の扱い方だと思います。どんな助けでも大歓迎です。よろしくお願いします!

4

2 に答える 2

4

あなたが正しいです。eは日付ではなく、 のインスタンスですServerValidateEventArgsValueそこからプロパティを取得する必要があります。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 の場合、解析は失敗しました。その場合、検証に失敗する必要があります。

于 2012-10-06T10:01:18.363 に答える
0

月の最終日を返し、2 つの日付を比較できる拡張メソッドがいくつかあります...

それらはオープンソースです... 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);
        }
    }
}
于 2012-10-06T10:03:04.377 に答える