数据库第一客户端验证澄清

时间:2014-02-26 15:24:55

标签: c# asp.net-mvc entity-framework validation

我正在尝试对Entity Framework 5中的数据库优先项目实施客户端验证。

我注意到了question,我看到了描述此MetaDataType属性的各种其他链接。但是,我不是100%确定如何设置它。

我在我的.edmx下看到所有部分类都获得了与表名和表中列相匹配的设置。

namespace Professional.DAL
{
    using System;
    using System.Collections.Generic;

    public partial class LeaderList
    {
        public LeaderList()
        {
            this.Answers = new HashSet<Answer>();
        }

        public int LeaderKey { get; set; }
        public string ID { get; set; }
        public string AccountName { get; set; }
        public long SchoolKey { get; set; }
        public Nullable<int> SchoolYear { get; set; }

        public virtual School School { get; set; }
        public virtual ICollection<Answer> Answers { get; set; }
    }
}

我需要澄清的部分是我是否在我的partial class文件夹(例如)中创建了具有此Models属性的另一个MetaDataType

[MetadataType(typeof(LeaderList.Metadata))]
public partial class LeaderList
{
    private sealed class LeaderList
    {
        [Required(ErrorMessage = "* required")]
        public string ID { get; set; }
        [Required(ErrorMessage = "* required")]
        public string AccountName { get; set; }
        [Required(ErrorMessage = "* required")]
        public Nullable<int> SchoolYear { get; set; }
        [Required(ErrorMessage = "* required")]
        public virtual School School { get; set; }
        [Required(ErrorMessage = "* required")]
        public virtual ICollection<Answer> Answers { get; set; }
    }

    // Add other similar properties here...
}

那是我应该做的吗?我试图理解这一点,所以我可以在我的下一个项目中实现它(因为我目前的项目我只进行了服务器端验证)。

欢迎并赞赏任何进一步研究的链接或书籍。

1 个答案:

答案 0 :(得分:1)

您需要为每个实体类型添加元数据类,并为要放置属性的部分类添加元数据类。例如:

public class Employee
{
    [Required(ErrorMessage = "* required")]
    public int Id { get; set; }

    [Required(ErrorMessage = "* required")]
    public string EmployeeString { get; set; }
    ...
}

[MetadataType(typeof(EmployeeEntitiesMetadata))]
public partial class Employee
{
}

然后,您可以使用html帮助程序设置客户端验证:

@Html.EditorFor(model => model.EmployeeString)

(对于Razor)

然后,这将使用与MVC捆绑在一起的不显眼的JavaScript库来设置验证。如果你查看生成的html,你会发现它适用于'data-val'属性。