使用模型在mvc 4中根据出生日期验证年龄

Cha*_*thz 3 c# asp.net jquery razor asp.net-mvc-4

我有登记表,其中包含出生日期.

使用日历日期选择器,它输入该字段的值.

这些是为此字段插入值的步骤

步骤1

在此输入图像描述

第2步

在此输入图像描述

第3步

在此输入图像描述

所以它采用dd/MM/yyyy格式的值

这是我的模型类中出生日期字段的外观

[DisplayName("Date of Birth")]
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public Nullable<System.DateTime> Date_of_Birth { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是我视图文件中出生日期字段的外观

   <div class="form-group"> 
   <div class="editor-label">
        @Html.LabelFor(model => model.Date_of_Birth)
        @Html.Label("*", new { id="star" , @class = "requiredFiledCol" })
   </div>
   <div class="editor-field">
        @Html.TextBoxFor(model => model.Date_of_Birth, "{0:dd/MM/yyyy}", new { @class = "form-control datepicker", placeholder = "DD/MM/YYYY" , maxlength="100" })
        @Html.ValidationMessageFor(model => model.Date_of_Birth)
    </div>
    </div>
Run Code Online (Sandbox Code Playgroud)

我想对出生地数据进行客户端验证.输入字段不在此范围内时显示错误消息100>年龄> 18

我应该采取的方法是什么?

Wal*_*ven 10

好吧,因为你已经在使用数据注释,为什么不自己做.做这个:

在您使用的dll中创建一个类或创建一个新的类,并至少添加以下代码

public class MinimumAgeAttribute: ValidationAttribute
{
    int _minimumAge;

    public MinimumAgeAttribute(int minimumAge)
    {
      _minimumAge = minimumAge;
    }

    public override bool IsValid(object value)
    {
        DateTime date;
        if (DateTime.TryParse(value.ToString(),out date))
        {
            return date.AddYears(_minimumAge) < DateTime.Now;
        }

        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的视图模型中执行此操作:

[MinimumAge(18)]
[DisplayName("Date of Birth")]
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public Nullable<System.DateTime> Date_of_Birth { get; set; }
Run Code Online (Sandbox Code Playgroud)

或者您的网页没有任何问题,因为您使用的框架将提取它.如果不更改类中的ErrorMessage属性,您将获得类似的内容

字段"{0}"无效.

{0}将替换为您在模型中为该属性提供的属性名称或显示名称属性.

希望对你有效.

Walter ps:确保你在控制器中做到了

if (ModelState.IsValid)
{
 ....
}
Run Code Online (Sandbox Code Playgroud)