asp.net - ASP.NET 核心 MVC 自定义验证比较日期
问题描述
我的剃刀视图上有两个日期,我需要对此进行验证,如果 To date 小于 from date,则使用数据注释显示错误。当我在调试模式下运行代码时,断点命中但它没有在页面上呈现错误。如果模型状态无效,它会以相同的方式再次显示表单下面是我的代码,我做错了什么。
public class AcctViewModel: IValidatableObject
{
[Key] public long AccountId { get; set;}
[Display(Name = "Account Name"), DataType(DataType.Text), StringLength(15), Required]
public string AcctName {get;set;}
[Display(Name = "From Date"), DataType(DataType.Date), Required]
public DateTime FromDate { get; set; }
[Display(Name = "To Date"), DataType(DataType.Date), Required]
public DateTime ToDate { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
List<ValidationResult> errors = new List<ValidationResult>();
if (ToDate < FromDate)
{
errors.Add(new ValidationResult($"{nameof(ToDate)} needs to be greater than From date.", new List<string> { nameof(ToDate) }));
}
return errors;
}
}
<div class="form-row">
<div class="col-md-12">
<div class="form-group form-group--float">
<input class="form-control date-picker" asp-for="ToDate">
<label asp-for="ToDate"></label>
<div class="invalid-tooltip"><span asp-validation-for="ToDate"></span></div>
<i class="form-group__bar"></i>
</div>
</div>
</div>
</div>
解决方案
控制器:
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Index(AcctViewModel model)
{
if (ModelState.IsValid)
{
}
return View(model);
}
看法:
<form asp-action="Index">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="AccountId" class="control-label"></label>
<input asp-for="AccountId" class="form-control" />
<span asp-validation-for="AccountId" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="AcctName" class="control-label"></label>
<input asp-for="AcctName" class="form-control" />
<span asp-validation-for="AcctName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="FromDate" class="control-label"></label>
<input asp-for="FromDate" class="form-control" />
<span asp-validation-for="FromDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="ToDate" class="control-label"></label>
<input asp-for="ToDate" class="form-control" />
<span asp-validation-for="ToDate" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
模型:
public class AcctViewModel : IValidatableObject
{
[Key]
public long AccountId { get; set; }
[Display(Name = "Account Name"), DataType(DataType.Text), StringLength(15), Required]
public string AcctName { get; set; }
[Display(Name = "From Date"), DataType(DataType.Date), Required]
public DateTime FromDate { get; set; }
[Display(Name = "To Date"), DataType(DataType.Date), Required]
public DateTime ToDate { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
List<ValidationResult> errors = new List<ValidationResult>();
if (ToDate < FromDate)
{
errors.Add(new ValidationResult($"{nameof(ToDate)} needs to be greater than From date.", new List<string> { nameof(ToDate) }));
}
return errors;
}
}
推荐阅读
- unity3d - 我的 Visual Studio 显示随机“格式错误”
- javascript - 使用 fetch 成功调用 API,但无法从对象中提取单个值
- graphql - Graphql:无法获取以扩展类型传递的参数
- xml - “XML 解析错误:
:2:0: 未绑定前缀”在播客 RSS 提要中 - javascript - 访问在另一个组件中定义的地图
- javascript - Javascript:未定义的值
- python - Pytorch MNIST 代码返回 IndexError
- python - 如何根据测试参数正确跳过测试?
- laravel - 如何在 Laravel 7 中为单选按钮设置表单标签
- windows - 替换现有 Win32 .exe 中的 PE 存根