限制日期时间选择器的范围

时间:2020-08-11 08:53:06

标签: c# asp.net-core model-view-controller crud datetimepicker

我正在将ASP.NET CORE MVC与EF CORE一起使用。

下面的代码允许我在日期时间选择器中选择日期时间。但是,我要这样做,以便用户将无法选择当前日期时间之前5天和3小时之前的任何日期时间。

假设找不到DateTimePicker的JQuery代码,如何限制日期时间?

查看:

<div class="form-group">
     <label asp-for="DateTime" class="control-label"></label>
     <input asp-for="DateTime" class="form-control"   />
     <span asp-validation-for="DateTime" class="text-danger"></span>
</div>

模型(如果需要):

[Required(ErrorMessage = "Please Enter The Date/Time ..")]
[Display(Name = "Date/Time")]
public DateTime DateTime { get; set; }

控制器:

public IActionResult CreateTest()
{
    return View();
}

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateTest([Bind("ID,DateTime")] TestModel testModel)
{
    if (ModelState.IsValid)
    {
        testModel.ID = Guid.NewGuid();
        _context.Add(testModel);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }
    return View(testModel);
}

1 个答案:

答案 0 :(得分:1)

您可以构建自定义Validation attribute来设置日期范围。

[Required(ErrorMessage = "Please Enter The Date/Time ..")]
[Display(Name = "Date/Time")] 
[ValidateDateRange]
public DateTime DateTime { get; set; }

这是ValidateDateRange的代码。

public class ValidateDateRange : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        DateTime dt = (DateTime)value;

        if (dt <= DateTime.Now.AddDays(-5).AddHours(-3))
        {
            return ValidationResult.Success;
        }
        else
        {
            return new ValidationResult("Date is not in given range.");
        }
    }
}

测试屏幕截图

enter image description here

链接到Validation attributes