2014-04-13 31 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