我想验证包含在两个字段中的电话号码。MVC3验证多个字段作为单个属性
第一个字段显示区号,另一个字段显示剩余的电话号码数字。
的要求是:
- 他们要求两者。
- 它们必须是数字。
- 区号字段必须最多为6位数字,电话号码字段必须最多为10位数字。
需要为这两个字段显示单条消息。例如,如果地区代码丢失但提供了电话号码,则应在两个字段后面显示一条消息,说明“请输入电话号码”。。
我目前拥有的模式是类似于:
public class Customer
{
//...other fields here
public string AreaCode { get; set; }
public string PhoneNumber { get; set; }
}
我无法实现电话与正则表达式或simlar单场。
也有同样的问题,这个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; }
}
然而,我所遇到的一个小问题,所提供的解决方案。自定义验证属性返回的错误仅针对具有数据注释的字段(PhoneNumber是上述模型)进行报告。因此,如果用户没有输入AreaCode,但提供了PhoneNumber,则将针对PhoneNumber字段而不是AreaCode报告错误。此外,如果您使用Visual Studio Internet项目提供的css,则提供的PhoneNumber字段将显示为红色,而无效区域代码显示为白色(不显示错误),因此这看起来有点奇怪。
有没有人有办法纠正这种着色行为,或者如果任何一个字段出错(在字段中使用正确的颜色),我可以报告错误消息的方式?
预先感谢您。
我不太确定这个例子中的实现是如何工作的。唯一可以实现这个功能的方法是在属性之上添加属性,例如'[MultiFieldRequired(new string [3] {“Phone1”,“Phone2”,“Phone3”},ErrorMessage =“Phone#required “)]'------代码只接受一个数组。我不确定人们是如何使用这些逗号分隔的字符串并使其工作。 – ganjeii
我同意,语法不允许编译的东西,ganjeii是正确的 – Gaurav123