必填字段 - 条件表达/验证

时间:2014-01-30 20:24:37

标签: c# .net asp.net-mvc

我想知道如何在DateTime属性上设置条件要求。也就是说,除了检查这个必填字段是否为空之外,我希望输入(在cshtml文件中)不迟于今天的3周。

型号:

[DataType(DataType.Date)]
[Display(Name = "Start date"), Required(ErrorMessage = ValidationMessages.IsRequired)]
//[What else here for this condition??]
public DateTime StartDate { get; set; }

.cshtml:

<div class="form-group">
    <div class="editor-label">
        @Html.LabelFor(model => model.Assignment.StartDate)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Assignment.StartDate)
        @Html.ValidationMessageFor(model => model.Assignment.StartDate)
    </div>
</div>

这样的条件表达式怎么样?我需要在模型中添加除条件之外的东西吗?

如果我的描述太少,请说出来。

// 提前致谢,问候

2 个答案:

答案 0 :(得分:0)

您可以在模型中执行此操作。添加正确的错误消息。

[Required(ErrorMessage = "")]

[Range(typeof(DateTime), DateTime.Now.ToString(), DateTime.Now.AddDays(21).ToString(), ErrorMessage = "" )]

public DateTime StartDate { get; set; }

答案 1 :(得分:0)

您可以创建自己的验证属性,如下所示:

1)具有自定义错误消息的自定义验证属性

public class CheckInputDateAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var inputDate = (DateTime)value;
        var compareDate = DateTime.Now.AddDays(21);
        int result = DateTime.Compare(inputDate, compareDate);
        const string sErrorMessage = "Input date must be no sooner than 3 weeks from today.";
        if (result < 0)
        {
            return new ValidationResult(sErrorMessage);
        }
        return ValidationResult.Success;
    }
}

然后像

一样使用它
  [DataType(DataType.Date)]
  [CheckInputDate]
  public DateTime StartDate { get; set; }

2)没有自定义错误消息的自定义验证属性

public class CheckInputDateAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var inputDate = (DateTime)value;
        var compareDate = DateTime.Now.AddDays(21);
        int result = DateTime.Compare(inputDate, compareDate);
        return result >= 0;
    }
}

然后像

一样使用它
    [DataType(DataType.Date)]
    [Display(Name = "Start date")]   
    [CheckInputDate]
    public DateTime StartDate { get; set; }