【发布时间】:2011-11-04 17:08:43
【问题描述】:
我正在尝试验证包含在两个字段中的电话号码。
第一个字段显示区号,另一个字段显示剩余的电话号码数字。
要求是:
- 它们都是必需的。
- 它们必须是数字。
- 区号字段不得超过 6 位,电话号码字段不得超过 10 位。
需要为两个字段显示一条消息。例如,如果缺少区号但提供了电话号码,则应在两个字段之后显示一条消息,说明 “请输入电话号码。”。
我目前拥有的模型类似于:
public class Customer
{
//...other fields here
public string AreaCode { get; set; }
public string PhoneNumber { get; set; }
}
我无法使用正则表达式或类似表达式将电话实现为单个字段。
这个here 有一个类似的问题(也有点类似于here),其中答案建议创建一个自定义验证属性(在本例中名为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; }
}
但是,我在提供的解决方案中遇到了一个小问题。自定义验证属性返回的错误仅针对具有数据注释的字段报告(电话号码是上面的模型)。因此,如果用户未输入 AreaCode 但提供了 PhoneNumber,则会针对 PhoneNumber 字段而不是 AreaCode 报告错误。此外,如果您使用的是 Visual Studio Internet 项目提供的 CSS,则提供的 PhoneNumber 字段将显示为红色,而无效的区号显示为白色(未显示错误),因此这看起来有点奇怪。
有没有人有办法纠正这种着色行为,或者如果任一字段有误(在字段上使用正确的颜色),我可以报告错误消息?
提前谢谢你。
【问题讨论】:
标签: c# asp.net-mvc-3 validation