我使用Silverlight创建一个站点,并在注册用户时使用自定义验证。我想阻止使用相同用户名注册两个用户。我使用Entity Framework
和WCF RIA
。
但是当我插入与先前注册的用户相同的用户名时,我的页面中不会显示错误。为什么呢?
这是我的代码:
//this code is for domain service MetaData
[CustomValidation(typeof(UserExistValidation),"UserNotExist")]
[Required(ErrorMessage = "username is required!")]
public string username { get;set; }
我的验证员:
public class UserExistValidation
{
public static ValidationResult UserNotExist(string username)
{
JobDBEntities myDB = new JobDBEntities();
var query = (from u in myDB.tblUsers where u.username == username select new { u.username }).SingleOrDefault();
if (query == null)
{
return ValidationResult.Success;
}
else return new ValidationResult("this usename is existed!");
}
}
这是我的xaml代码:
<TextBox Text="{Binding Path=username,Mode=TwoWay,ValidatesOnExceptions=True}" x:Name="txtusername"/>
答案 0 :(得分:0)
您似乎需要将ValidatesOnExceptions=True
添加到Binding
。
<TextBox x:Name="UserNameInputElement"
Text="{Binding Path=username, Mode=TwoWay, ValidatesOnExceptions=True}"/>
这会在验证错误时产生红色飞出。
[编辑]
我可以看到你从未提出PropertyChanged
事件,这可能会阻止验证错误传播(只是一个模糊的想法,我不久前有类似的问题)。
如果您实施INotifyPropertyChanged
并添加:
public string username {
get { return m_username; }
set { m_username = value; RaiseUsernameChanged(); } }
private string m_username;
private void RaiseUsernameChanged()
{
var h = PropertyChanged;
if (h!=null) h(this,new PropertyChangedEventArgs("username"));
}
public event PropertyChangedEventHandler PropertyChanged;