2012-06-15 59 views

回答

1

屬性添加到您的模型只返回被綁定到輸入屬性的簡化版一個getter。將您的驗證屬性放在該屬性上。

public string PhoneNumber {get;set;} 

[Required(ErrorMessage="Phone number is required.")] 
[RegularExpression(@"\d{10}", ErrorMessage="Phone number is invalid.")] 
public string PhoneNumberValue 
{ 
    get 
    { 
     var temp = PhoneNumber 
     temp = Regex.Replace(temp, @"[^0-9]", ""); 
     temp = temp.Length == 11 && temp.StartsWith("1") 
      ? temp.Substring(1) : temp; 
    } 

    set 
    { 
     // I can't remember off the top of my head if MVC model 
     // binding requires a setter or not. If so, just leave this 
     // empty. Otherwise you can remove it entirely. 
    } 
} 

然後,在您的視圖中,只呈現替代驗證消息。

@Html.LabelFor(x=>x.PhoneNumber) 
@Html.TextBoxFor(x=>x.PhoneNumber) 
@Html.ValidationMessageFor(x=>x.PhoneNumberValue) 
+0

這將工作。謝謝! – user321605

1

下面是一個例子,如何用正則表達式驗證:

[Required(ErrorMessage="Phone Number is required")] 
[RegularExpression("^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage="Not a valid number")] 
public string PhoneNumber { get; set; } 

我們可能會使用字符串的修剪方法來清潔手機號碼,只得到數字。

char[] charsToTrim = { '(', ' ', ')', '-'}; 
string phoneNumber = "(123)-345-6789"; 
string result = banner.Trim(charsToTrim); 

最後這裏是一個職位,說明Enabling Validation using DataAnnotations in more detail

+1

感謝您的支持。我的目標是將整個解決方案分離到一個地方。這並不完全讓我在那裏,但它會解決我認爲的問題! – user321605

+0

沒問題。正如我在答覆中提到並引用的,您可能想爲您的案例創建一個特定的屬性。正則表達式和修整邏輯的邏輯應該起作用。 –