我正在尝试对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...
}
那是我应该做的吗?我试图理解这一点,所以我可以在我的下一个项目中实现它(因为我目前的项目我只进行了服务器端验证)。
欢迎并赞赏任何进一步研究的链接或书籍。
答案 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'属性。