在Silverlight中验证的问题

时间:2015-05-22 14:51:50

标签: c# .net silverlight-5.0 ria

我在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;

if!SILVERLIGHT

            IxoraDomainService service = new IxoraDomainService();

            if (service.IpAlreadyExist(Ip, officeIp.ID))
            {
                return new ValidationResult("Указанный Ip адрес уже существует", new[] { validationContext.MemberName });
            }

否则

即,从对象的先前状态请求ID。因此,在某个时间点它可能不等于零,而先前的条件是零。我可以从validationContext中获取当前状态,而不是对象的先前状态吗?

0 个答案:

没有答案