0

モデルがあるRazor Webページがあります

public class UploadModel
{
    [Required]
    [StringLength(25)]
    public string PatientID { get; set; }
    [DataType(DataType.Date)]
    [DateRange("1000/12/01", "4010/12/16")]
    public DateTime DrawDate { get; set; }
}
public class DateRangeAttribute : ValidationAttribute
{
    private const string DateFormat = "yyyy/MM/dd";
    private const string DefaultErrorMessage =
    "'{0}' must be a date between {1:d} and {2:d}.";

    public DateTime MinDate { get; set; }
    public DateTime MaxDate { get; set; }

    public DateRangeAttribute(string minDate, string maxDate)
        : base(DefaultErrorMessage)
    {
        MinDate = ParseDate(minDate);
        MaxDate = ParseDate(maxDate);
    }

    public override bool IsValid(object value)
    {
        if (value == null || !(value is DateTime))
        {
            return true;
        }
        DateTime dateValue = (DateTime)value;
        return MinDate <= dateValue && dateValue <= MaxDate;
    }
    public override string FormatErrorMessage(string name)
    {
        return String.Format(CultureInfo.CurrentCulture,
        ErrorMessageString,
        name, MinDate, MaxDate);
    }

    private static DateTime ParseDate(string dateValue)
    {
        return DateTime.ParseExact(dateValue, DateFormat,
        CultureInfo.InvariantCulture);
    }
}

それは日時の検証を行います

ただし、ビューでは、モデル内のすべての要素を実行すると

@Html.EditorFor(m => m)

クロスブラウザであるため、jqueryを使用してカレンダーの日付を選択しているため、問題を引き起こす日時型を作成しています。検証クラスを使用しても日時を強制的にテキストにする方法はありますか? ありがとう!

4

2 に答える 2

2

DrawDate プロパティから DataType 属性を削除するだけでよいと思います。

于 2012-10-02T18:42:39.370 に答える
1

カスタム検証を作成しているので、変更してみませんか

public DateTime DrawDate { get; set; }

文字列型に変更し、それに応じて検証を調整しますか?

于 2012-10-02T19:23:53.727 に答える