数据验证在编辑模式下不起作用

本文关键字:不起作用 模式 编辑 验证 数据 | 更新日期: 2023-09-27 18:35:39

我想在文本框上实现对数据库中是否存在名称的验证。我正在将 wpf 与 c# 一起使用。我在保存新数据时对文本框进行了验证。我的问题是在编辑模式下:当我进入编辑模式并尝试保存时,出现一个错误,表明该名称已经存在。

下面的代码在保存模式下工作正常,但是当涉及到编辑模式时,当数据绑定时,会显示错误消息。

请向我建议一种在编辑模式下实现验证的好方法。

class MyParent
 {
   public MyCarClass CurrentCarEntity {get; set;}
    private void txtName_TextChanged(object sender, RoutedEventArgs e)
     {            
         CurrentCarEntity.Name = txtName.Text.Trim();
         var getName = //Code for getting name from local db
         if(CurrentCarEntity.Name != Null)
           {
              if(getName.Equals(CurrentCarEntity.Name))
                {
                   MessageBox.Show("Name Already Exists");
                }
           }
     }   
}

数据验证在编辑模式下不起作用

如果名称已存在,则看起来您正在使整个表单的验证失败 - 每次您尝试提交(编辑、插入等)时都会触发验证,因此编辑将始终失败。

我会制作两个文本框,一个用于插入,一个用于编辑。在编辑模式下隐藏插入框,或者如果您想坚持使用插入框,至少在编辑时禁用验证器。

看来你走错了方法

让我们假设我们有一个名为 users 的类,如下所示

public class User: IValidatableObject
{
     public int Id{get; set;}
     public string UserName{get; set;}
     public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
     {
          if(string.IsNullOrEmpty(UserName))
               yield return new ValidationResult("Username field is required!", new string[]{"UserName"});
          else 
          {
               // check if another User has the same username already
               var db= new YourDbContext();
               var exists=db.Users.FirstOrDefault(t=>t.Id!=Id && t.UserName.ToLower()=UserName.ToLower());
               if(exists!=null)
                   yield return new ValidationResult("Username is already used by another user!", new string[]{"UserName"});
          }
     }
}

您无需担心编辑或创建,因为在这两种情况下,您都会检查数据库,如果 Users 表包含另一个用户,而不是您正在创建或编辑的同一用户,是否具有相同的用户名。

希望这对你有帮助