2014-04-13 15 views
0

我使用Silverlight创建网站,并在注册用户时使用自定义验证。我想阻止两个用户使用相同用户名注册。我用Entity FrameworkWCF RIA。 但是,当我插入与先前注册的用户相同的用户名时,我的页面中不显示任何错误。为什么?Silverlight中的自定义验证

这是我的代码:

//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

看起来您需要将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; 
+0

我添加这个,但我的页面不会改变 – user3472324

+0

@ user3472324:什么是您的绑定是什么样子?最好的事情是你编辑你的问题,并提供可以看到用户名绑定的xaml部分。 – Martin

+0

我使用domainservice.metadata显示错误。我是否应该在我的服务器项目中实现一个诸如“newuser”这样的验证错误的类? – user3472324