2012-06-15 23 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

没问题。正如我在答复中提到并引用的,您可能想为您的案例创建一个特定的属性。正则表达式和修整逻辑的逻辑应该起作用。 –