Asp.net mvc ASP.NETMVC不引人注目的日期范围验证
我有一个带有两个日期字段的表单,开始日期和结束日期。我想验证这两个字段,以确保开始日期在结束日期或之前。我编写了一个远程验证器,并将其分配给这两个字段,但这可能会导致同一错误的多条消息。此外,如果我更正了一个日期,验证不会在未修改的字段上触发,并留下旧的错误消息Asp.net mvc ASP.NETMVC不引人注目的日期范围验证,asp.net-mvc,validation,date,data-annotations,Asp.net Mvc,Validation,Date,Data Annotations,我有一个带有两个日期字段的表单,开始日期和结束日期。我想验证这两个字段,以确保开始日期在结束日期或之前。我编写了一个远程验证器,并将其分配给这两个字段,但这可能会导致同一错误的多条消息。此外,如果我更正了一个日期,验证不会在未修改的字段上触发,并留下旧的错误消息 如何对两个日期字段进行相互验证,以验证开始日期是否在结束日期之前?几周前,我遇到了同样的问题。我认为解决这个问题的最好方法是使用jquery实现客户端控件。 通过这种方式,您可以在每次更改StartDate或EndDate上的值时调用验
如何对两个日期字段进行相互验证,以验证开始日期是否在结束日期之前?几周前,我遇到了同样的问题。我认为解决这个问题的最好方法是使用jquery实现客户端控件。 通过这种方式,您可以在每次更改StartDate或EndDate上的值时调用验证。在这种情况下,最好调用服务器来验证客户端上的数据,因为您不调用服务器 在下面的链接中,有一个实现客户端验证的过程。 这是我的解决方案: 步骤1:创建属性类以验证连续日期
public class ConsecutiveDateAttribute : ValidationAttribute, IClientValidatable
{
public ConsecutiveDateAttribute()
{
ErrorMessage = "The date must be consecutive";
}
public override bool IsValid(object value)
{
return true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule();
rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName());
rule.ValidationParameters.Add("datefield", metadata.PropertyName);
rule.ValidationType = "consecutivedate";
yield return rule;
}
}
步骤3:在页面中实现javascript以验证日期
<script src="@Url.Content("~/Scripts/jquery-1.10.2.js")" type="text/javascript" />
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript" />
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
<script type="text/javascript">
if ($.validator && $.validator.unobtrusive) {
$.validator.unobtrusive.adapters.addSingleVal("consecutivedate", "datefield");
$.validator.addMethod("consecutivedate", function(value, element) {
if ($("#StartDate").val() != "" && $("#EndDate").val() != "")
return $("#StartDate").val() <= $("#EndDate").val();
// IF both values are not polupated I don't want to validate the field
return true;
});
}
</script>
如果($.validator&$.validator.unobtrusive){
$.validator.unobtrusive.adapters.addSingleVal(“连续日期”、“日期字段”);
$.validator.addMethod(“连续数据”,函数(值,元素){
如果($(“#开始日期”).val()!=”&&($(“#结束日期”).val()!=”)
return$(“#StartDate”).val()请将链接的内容也包含在此处。很抱歉,这是我的第一次答复。Nextone将更加完整。感谢您的反馈。
<script src="@Url.Content("~/Scripts/jquery-1.10.2.js")" type="text/javascript" />
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript" />
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
<script type="text/javascript">
if ($.validator && $.validator.unobtrusive) {
$.validator.unobtrusive.adapters.addSingleVal("consecutivedate", "datefield");
$.validator.addMethod("consecutivedate", function(value, element) {
if ($("#StartDate").val() != "" && $("#EndDate").val() != "")
return $("#StartDate").val() <= $("#EndDate").val();
// IF both values are not polupated I don't want to validate the field
return true;
});
}
</script>