我在Silverlight上使用验证,我遇到了一些麻烦: 我需要检查填充场地及其独特性。为此,我向实体元数据添加了属性:
[Required(ErrorMessage="Необходимо указать название производителя")]
[CustomValidation(typeof(MakerValidator), "CheckName")]
写出适当的验证器和函数来检查唯一性:
[Invoke]
public bool IpAlreadyExist(string Ip, int ID)
{
if (ID > 0) return this.ObjectContext.OFFICE_IP.Any(a => a.IP == Ip && a.ID != ID && a.L_DEL == false);
return this.ObjectContext.OFFICE_IP.Any(a => a.IP == Ip && a.L_DEL == false);
}
(如果编辑实体我们检查另外存在另一个ID,如检查。)
但是我们遇到了一些问题: 1 - 当我们创建新实体并在输入验证之前保存它不起作用,因为没有Property更改 2 - 在保存验证字段突出显示为墨水错误之后很少,如果我们再次删除并输入相同的值,则字段将是正确的。 (我认为这一点是一些propertyChanged在保存之前发生并且Id它是元素0,但是这条记录存在于数据库中。)
我们可以用这个麻烦做些什么?
这是一段代码分析
public class OfficeIpValidator
{
public static ValidationResult CheckIp(string Ip, ValidationContext validationContext)
{
OFFICE_IP officeIp = (OFFICE_IP)validationContext.ObjectInstance;
IxoraDomainService service = new IxoraDomainService();
if (service.IpAlreadyExist(Ip, officeIp.ID))
{
return new ValidationResult("Указанный Ip адрес уже существует", new[] { validationContext.MemberName });
}
即,从对象的先前状态请求ID。因此,在某个时间点它可能不等于零,而先前的条件是零。我可以从validationContext中获取当前状态,而不是对象的先前状态吗?