2013-06-30 21 views
1

我有我的類地址之一的兩個領域像忽略MVC模式正則表達式或根據用戶輸入選擇另一個正則表達式

public string Country { get; set; } 
[Required(ErrorMessage = "Postcode is required")] 
[RegularExpression(@"REGEX", 
ErrorMessage = "Please enter a valid UK Postcode)] 
public string postcode { get; set;} 

但是,如果用戶選擇除英國以外的國家,那麼我希望我的郵編字段忽略REGEX至少和理想的世界驗證使用另一個REGEX取決於國家。任何人都可以建議,如果這是可能的模型本身?

回答

2

有幾種不同的方法供您選擇:

  1. 創建結合了RequiredRegularExpression屬性您需要的100%自定義驗證屬性。因此,在該自定義屬性中,您將執行所需的所有驗證,並將該值與Country屬性進行比較,以根據需要選擇性地應用RegEx。

  2. 創建每個國家,你在乎一個不同postcode屬性,並使用類似'RequiredIfAttribute(見RequiredIf Conditional Validation Attribute),以確定哪一個是實際需要。然後您可以使用Javascript來顯示/隱藏適當的輸入字段。

+0

感謝馬特我用你的答案選項。 –

2

你可以用IValidatableObject做到這一點:

class MyClass : IValidatableObject { 

    public string Country { get; set; } 

    [Required(ErrorMessage = "Postcode is required")] 
    public string postcode { get; set;} 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { 

     if (!String.IsNullOrEmpty(Country) 
     && !String.IsNullOrEmpty(postcode)) { 

     switch (Country.ToUpperInvariant()) { 
      case "UK": 
       if (!Regex.IsMatch(postcode, "[regex]")) 
        yield return new ValidationResult("Invalid UK postcode.", new[] { "postcode" }); 
       break; 

      default: 
       break; 
     } 
     } 
    } 
}