2010-03-15 30 views
6

ile doğrulamak için nasıl Sadece ASP.NET MVC 2 ile başladım ve Validation ile oynamak.Iki özelliği ASP.NET MVC 2

ı 2 özelliklere sahip diyelim:

  • Parola1
  • password2

Ve ikisi de doldurulur gerektirir istiyoruz ve her iki model daha önce aynı olduğunu gerektirir geçerli.

"NewUser" adlı basit bir dersim var.

Bunu nasıl uygularım? ValidationAttribute hakkında okudum ve bunu anladım. Fakat bunu, iki veya daha fazla mülkünü yemekten başka biriyle karşılaştıran bir doğrulama uygulamak için nasıl kullanacağımı anlamıyorum.

Şimdiden teşekkürler! çözeltisi aşağıdaki ile

Sorun:

bir ise: Bu uygulamaya uygulanan ve ModelBinder Modelinin doğrulama ishal

, daha sonra bir sorun orada Özellik düzeyindeki ValidationAttribute bir hata içeriyor, ardından Sınıf düzeyi ValidationAttribute adlı kullanıcının değil doğrulandı. Bu problemi henüz çözemedim.

Bu soruna bir çözümünüz varsa, lütfen deneyiminizi paylaşın. Çok teşekkürler!

cevap

7

Visual Studio'nun varsayılan ASP.NET MVC 2 şablonu, gereksinim duyduğunuz tam doğrulama özelliğini içerir. AccountModels.cs dosyadan yapıştırıldı:

[AttributeUsage(AttributeTargets.Class, 
    AllowMultiple = true, Inherited = true)] 
public sealed class PropertiesMustMatchAttribute : ValidationAttribute { 
    private const string _defaultErrorMessage = 
     "'{0}' and '{1}' do not match."; 
    private readonly object _typeId = new object(); 

    public PropertiesMustMatchAttribute(string originalProperty, 
     string confirmProperty) 
     : base(_defaultErrorMessage) { 
     OriginalProperty = originalProperty; 
     ConfirmProperty = confirmProperty; 
    } 

    public string ConfirmProperty { get; private set; } 
    public string OriginalProperty { get; private set; } 

    public override object TypeId { 
     get { 
      return _typeId; 
     } 
    } 

    public override string FormatErrorMessage(string name) { 
     return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString, 
      OriginalProperty, ConfirmProperty); 
    } 

    public override bool IsValid(object value) { 
     PropertyDescriptorCollection properties = 
      TypeDescriptor.GetProperties(value); 
     object originalValue = properties.Find(OriginalProperty, 
      true /* ignoreCase */).GetValue(value); 
     object confirmValue = properties.Find(ConfirmProperty, 
      true /* ignoreCase */).GetValue(value); 
     return Object.Equals(originalValue, confirmValue); 
    } 
} 

nasıl kullanılır:

[PropertiesMustMatch("Password", "ConfirmPassword", 
    ErrorMessage = "The password and confirmation password do not match.")] 
class NewUser { 
    [Required] 
    [DataType(DataType.Password)] 
    [DisplayName("Password")] 
    public string Password { get; set; } 
    [Required] 
    [DataType(DataType.Password)] 
    [DisplayName("Confirm password")] 
    public string ConfirmPassword { get; set; } 
} 
+1

Ben bununla görebilirsiniz tek sorun, Model (bu durumda sınıfı) iki özellikleri, eşit olmadığında, [Required] ve <% = Html.ValidationMessageFor (m => P.Password1)%> – CodeMonkey

+0

@ CodeMonkey için olduğu gibi, hatalar içeren belirli Özellikler'i belirtmez. Her ne kadar çalışmasını sağlamak için şık bir çözüm olup olmadığından emin değilim. Sonuçta, bu teknik olarak sınıf düzeyinde bir doğrulamadır. ** Eğer hatalar ** yerine bu özellikleri eklemeniz gerekiyorsa, o zaman belki de en iyi çözüm olmasa da (en zarif olmasa bile) kontrol edicideki iki değeri kontrol edebilirsiniz. –

+0

MVC 2 sürümünde, Html.ValidationSummary yardımcı yöntemi artık yalnızca Model Düzeyindeki hataları gösterebilir – murki