我有一个可变长度的人物模型列表,我使用@Html.EditorFor 为其生成表单。
public class Person
{
public string First { get; set; }
public string Last { get; set; }
}
验证没有人对象具有相同的名字和姓氏的最佳方法是什么?
我有一个可变长度的人物模型列表,我使用@Html.EditorFor 为其生成表单。
public class Person
{
public string First { get; set; }
public string Last { get; set; }
}
验证没有人对象具有相同的名字和姓氏的最佳方法是什么?
以下是验证集合中没有 2 个项目相同的最小实现:Person
public class NoDuplicatePersonsAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var people = value as IList<Person>;
int count = people.Count();
if (people == null) return true;
for (int x = 0; x < count; x++)
{
for (int y = 0; y < count; y++)
{
if (x != y &&
people[x].FirstName == people[y].FirstName &&
people[x].LastName == people[y].LastName)
return false;
}
}
return true;
}
}
public class IndexViewModel
{
[NoDuplicatePersons]
public IList<Person> People { get; set; }
}
public class Person
{
public string FirstName{ get; set; }
public string LastName { get; set; }
}
如果可能,我会在表上创建一个唯一约束并在 Person insert 中拦截 DB Exception。
但是您也可以创建一个验证属性来检查现有的名字/姓氏组合。
此伪代码示例不考虑检查 First Name/Last Name combo,而只是查看一个字段 NAME,作为每个问题的自定义验证示例。
创建自定义验证属性:
public class NameAttribute : ValidationAttribute, IClientValidatable
{
//Validate logic
}
在模型中,使用自定义验证属性并包含错误消息:
public class Person
{
[Required]
[Name (ErrorMessage = "This name already exists.")]
[Display(Name = "Name")]
public string Name { get; set; }
}
看法:
<div class="editor-field">
@Html.TextBoxFor(m => m.Name)
@Html.ValidationMessageFor(m => m. Name)
</div>