mvc 5和验证模型

时间:2014-05-14 15:18:11

标签: asp.net asp.net-mvc asp.net-mvc-5

我正在为项目使用MVC 5和Entity Framework。

我的项目中有一个模型:

public class ContractViewModel : IValidatableObject
{
    public int Id { get; set; }

    [Required]
    [DisplayName("Registration Number")]
    public string RegistrationNumber { get; set; }

    [DisplayName("Start Date")]
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime? StartDate { get; set; }

    [DisplayName("Scheduled End Date")]
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime? EndDate { get; set; }

    }


    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        // check 1: Start Date should be before End Date
        if (StartDate != null && EndDate != null)
        {
            if (DateTime.Compare(StartDate.Value, EndDate.Value) > 0)
            {
                yield return new ValidationResult("Start Date must be before End Date");
            }
        }
    }
}

我需要在那里进行一些检查,注册号需要填写,而不是已经存在。与开始日期一起必须在结束日期之前。

目前注册编号我在那里有必需的注释,因为它还没有存在,当我进行保存时,我在那里检查它是否已经存在我使用:

ModelState.AddModelError("", "Registration Number already exists.");

对于StartDate和EndData,我使用了IValidateObject接口中的Validate方法。

我没有在Validate方法中执行注册号检查的原因是我不希望该库(ProjectModels.dll)引用实体框架。

目前,当检查完成时,它们不会合并,因此如果未输入注册号且EndDate在StartDate之前,则仅显示注册号验证。

无论如何都要让他们一起表演?

注册号的必需注释也会在表单上的字段下显示错误消息,使用ValidationMessageFor属性,无论如何在出现这些错误时为其他2显示错误消息?

1 个答案:

答案 0 :(得分:0)

编写需要自定义代码的复杂业务规则,通过调用存储库数据访问代码来查找数据可能既有趣又具有挑战性。

有一个名为Foolproof的Nuget包,它增加了一些扩展你可以做的事情的属性,但是创建业务对象的优秀框架是CSLA.Net。