数据验证在编辑模式下不起作用
本文关键字:不起作用 模式 编辑 验证 数据 | 更新日期: 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 表包含另一个用户,而不是您正在创建或编辑的同一用户,是否具有相同的用户名。
希望这对你有帮助