我想在文本框中实现验证,以确定该名称是否存在于数据库中。我在c#中使用wpf。我在保存新数据的同时在文本框中实现了验证。我的问题是编辑模式:当我进入编辑模式并尝试保存时,会出现一个错误,表明该名称已存在。
以下代码在保存模式下正常工作但是当数据绑定时,编辑模式显示错误消息。
请给我一个很好的方法来实现在编辑模式下工作的验证。
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");
}
}
}
}
答案 0 :(得分:1)
如果名称已存在,您似乎无法对整个表单进行验证 - 每次尝试提交(编辑,插入等)时都会触发验证,因此编辑将始终失败。
我会制作两个文本框,一个用于插入,另一个用于编辑。在编辑模式下隐藏插入框,或者如果您想坚持使用插入框,至少在编辑时禁用验证器。
答案 1 :(得分:0)
您似乎遵循了错误的方法
让我们假设我们有一个名为用户的类,如下面的
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表包含其他用户,而不是您正在创建或编辑的同一用户,则检查数据库具有相同的用户名。
希望这会对你有所帮助