2011-06-29 10 views
6

Örneğin, bir Çalışan görünümü modelim var. Bir çalışan oluştururken, mevcut olmadığından emin olmak için kullanıcı adını doğrulamak istiyorum.MVC 3'te özel veri açıklaması doğrulaması oluşturma

Ve sonra yinelemeyi denetlemek için ValidateDuplicate işlevimi bir yere kodla sahipler.

Bu mümkün mü?

cevap

14

remote validation.'a bakmanızı öneririm Örnek bilevanınızla eşleşiyor.

Temelde,

public ActionResult IsUserExists(string userName) 
{ 
if (!UserService.UserNameExists(userName) || (CurrentUser.UserName == userName)) 
{ 
     return "Ok."; 
} 
} 
+2

Bu bir tombala! – Steven

+0

Bağlantı bozuk – sohtimsso1970

+1

David Hayden blogunu başka bir yere taşıdı ve eski blog gönderilerini geri göndermedi (ya da yapamadı). Bu, Microsoft'un belgelerine doğrudan bir bağlantı olduğu söyleniyor: http://msdn.microsoft.com/en-us/library/gg508808(v=vs.98).aspx – Khepri

2

Evet, bu mümkün işinizi yapan bir kontrolör eylem

[Remote("IsUserExists", "Account", ErrorMessage = "Can't add what already exists!")] 
[Required(ErrorMessage = "Username is required")] 
[DisplayName("Username")] 
public string Username { get; set; } 

işaret sizin ViewModel özelliğine uzaktan niteliğini ekleyin. write your own validation attribute'a ihtiyacınız olacak.

+4

Bağlantı bozuk. – NightOwl888

+0

Bağlantı benim için çalışıyor – sohtimsso1970

0

Bunu, ValidateDuplicate çağıran Attribute sınıfını genişleterek yapabilirsiniz. Bunu böyle yapmaktan kaçınırım çünkü bir veritabanına çağrı yapmak için potansiyel olarak sahip olduğunuz başka bir yer.

2

here açıklandığı gibi kendi özel onayınızı yazabilirsiniz. Modelde geçerli kayıtların geçerlilik stilini tercih ettiğim için, modelde doğrulama eklemek için kodu değiştirdim.

public class EmployeeViewModel 
{ 

    [CustomValidation(typeof(EmployeeViewModel), "ValidateDuplicate")] 
    [Required(ErrorMessage = "Username is required")] 
    [DisplayName("Username")] 
    public string Username { get; set; } 

    public static ValidationResult ValidateDuplicate(string username) 
    { 
     bool isValid; 

     using(var db = new YourContextName) { 
     if(db.EmployeeViewModel.Where(e => e.Username.Equals(username)).Count() > 0) 
     { 
      isValid = false; 
     } else { 
      isValid = true; 
     } 
     } 

     if (isValid) 
     { 
     return ValidationResult.Success; 
     } 
     else 
     { 
     return new ValidationResult("Username already exists"); 
     } 

    } 
} 
İlgili konular