我正在尝试验证包含两个字段的电话号码。
第一个字段显示区号,另一个字段显示剩余的电话号码数字。
要求是:
- 它们都是必需的。
- 它们必须是数字。
- 区号字段最多为 6 位数字,电话号码字段最多为 10 位数字。
两个字段都需要显示一条消息。例如,如果缺少区号但提供了电话号码,则在两个字段后应显示一条消息,说明“请输入电话号码。”.
我目前拥有的模型类似于:
public class Customer
{
//...other fields here
public string AreaCode { get; set; }
public string PhoneNumber { get; set; }
}
我无法将电话作为具有正则表达式或类似表达式的单个字段来实现。
有一个与此类似的问题here https://stackoverflow.com/questions/6075339/mvc-form-validation-on-multiple-fields(也有点类似于here https://stackoverflow.com/questions/5816313/mvc3-unobtrusive-validation-group-of-inputs)其中答案建议创建一个自定义验证属性(在本例中名为MultiFieldRequired
) 指定属性中所需字段的名称。然后,验证属性使用反射来检查其他属性的值,以报告是否存在错误。
例如,在上述模型的情况下,我相信我应该:
public class Customer
{
//...other fields here
public string AreaCode { get; set; }
[MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")]
public string PhoneNumber { get; set; }
}
但是,我在提供的解决方案中遇到了一个小问题。自定义验证属性返回的错误仅针对具有数据注释的字段报告(PhoneNumber 是上面的模型)。因此,如果用户未输入区域代码但提供了电话号码,则将根据电话号码字段而不是区域代码报告错误。此外,如果您使用 Visual Studio Internet 项目提供的 CSS,则提供的 PhoneNumber 字段将显示为红色,而无效的区号显示为白色(不显示错误),因此这看起来有点奇怪。
有谁有办法纠正这种着色行为,或者如果任一字段出错(在字段上使用正确的颜色),我可以报告错误消息吗?
先感谢您。