Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 日期范围验证使控件变成日期时间输入类型,只需要文本类型_Asp.net Mvc_Validation_Razor_Controls - Fatal编程技术网

Asp.net mvc 日期范围验证使控件变成日期时间输入类型,只需要文本类型

Asp.net mvc 日期范围验证使控件变成日期时间输入类型,只需要文本类型,asp.net-mvc,validation,razor,controls,Asp.net Mvc,Validation,Razor,Controls,我有一个剃须刀网页,我有一个模型 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

我有一个剃须刀网页,我有一个模型

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);
    }
}

它创建了一个datetime类型,这会产生问题,因为我使用jquery来选择日历日期,因为它是跨浏览器的。有没有办法强制datetime成为文本,即使使用验证类?谢谢

我认为您只需要从DrawDate属性中删除DataType属性。

我认为您只需要从DrawDate属性中删除DataType属性。

既然您正在编写自定义验证,为什么不进行更改

public DateTime DrawDate { get; set; }

设置为字符串类型并相应地调整验证?

既然您正在编写自定义验证,为什么不进行更改

public DateTime DrawDate { get; set; }

创建一个字符串类型并相应地调整您的验证?

这就是我最后不得不做的,我只是想知道是否有一些扩展程序类可以添加进来,可以处理它。您可以保留DateTime类型,并使用类似于[Range(typeof(DateTime),“1/2/2000”,“3/4/2001”,ErrorMessage=“Value for{0}必须介于{1}和{2}”)]之间。这样,您可能不需要自定义验证类。另外,如果您对日期字符串的关注只是出于显示目的,那么您可以使用DisplayFormat属性为您执行从DateTime到字符串的转换,例如:[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:yyyy/mm/dd}”)]这就是我最后必须做的事情,我只是想知道我是否可以添加一些扩展类来处理它。您可以保留DateTime类型,并使用类似于[Range(typeof(DateTime),“1/2/2000”,“3/4/2001”,ErrorMessage=“0}的值必须介于{1}和{2}”)的内容。这样,您可能不需要自定义验证类。另外,如果您对日期字符串的关注只是出于显示目的,那么您可以使用DisplayFormat属性为您执行从DateTime到字符串的转换,类似:[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:yyyy/mm/dd}”)]