【发布时间】:2019-01-05 23:35:43
【问题描述】:
我正在尝试使用System.ComponentModel.DataAnnotations 验证StartDate 和EndDate,这样结束日期不得早于开始日期。在我的模型中,我将日期定义如下:
public partial class MyModel
{
[Required]
public DateTime StartDate { get; set; }
[Required]
public DateTime EndDate { get; set; }
}
我还创建了一个视图模型,如下所示:
public class CompareDateVM : IValidatableObject
{
public MyModel myModel { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {
if (myModel.EndDate < myModel.StartDate) {
yield return
new ValidationResult(errorMessage: "End Date cannot be lesser than Start Date.",
memberNames: new[] { "EndDate" });
}
}
}
服务器端验证有效,错误消息能够显示在我的查看页面的`@Html.ValidationSummary() 中,但我无法在客户端进行验证。
@model CompareDateVM
<form asp-controller="AddDate" asp-action="Add" method="post">
<label class="label">Start Date</label>
<input type="date" asp-for="myModel.StartDate" />
<span asp-validation-for="myModel.StartDate" class="validation"></span><br /><br />
<label class="label">End Date</label>
<input type="date" asp-for="myModel.EndDate" />
<!-- This is where the client side validation error message show up, but it does not appear-->
<span asp-validation-for="myModel.EndDate" class="validation"></span>
<input type="submit" value="Add Date" />
</form>
<!-- Server side validation works -->
<p>@Html.ValidationSummary()</p>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.1.1.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.16.0/jquery.validate.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/mvc/5.2.3/jquery.validate.unobtrusive.min.js"></script>
如何让<span asp-validation-for="myModel.StartDate" class="validation"></span> 使用 jQuery Unobtrusive Validation 在客户端显示错误消息?
【问题讨论】:
-
我已经回答了你的问题,现在稍微更新了我的答案。完全按照描述进行操作。希望它能解决你的问题。
-
IValidatableObject不提供客户端验证。为此,您需要一个ValidationAttributeiplmementsIClientModelValidator(请参阅Model validation in ASP.NET Core MVC
标签: asp.net-mvc data-annotations unobtrusive-validation