作者:瓜瓜哥哥 | 来源:互联网 | 2023-09-15 18:05
我正在尝试验证两个字段中包含的电话号码.第一个字段显示区号,另一个字段显示剩余的电话号码.要求是:它们都是必需的.它们必须是数字.区号字段最大为6位,电话号码字段最大为10位
我正在尝试验证两个字段中包含的电话号码.
第一个字段显示区号,另一个字段显示剩余的电话号码.
要求是:
>它们都是必需的.
>它们必须是数字.
>区号字段最大为6位,电话号码字段最大为10位.
这两个字段都需要显示一条消息.例如,如果缺少区号但提供了电话号码,则应在两个字段后都显示一条“请输入电话号码”的消息.
我目前拥有的模型类似于:
public class Customer
{
//...other fields here
public string AreaCode { get; set; }
public string PhoneNumber { get; set; }
}
我无法将电话实现为带有正则表达式或类似符号的单个字段.
有一个与此here类似的问题(并且也类似于here),答案建议创建一个自定义验证属性(在本例中为MultiFieldRequired),以指定该属性中必填字段的名称.然后,validation属性使用反射检查其他属性的值,以报告是否存在错误.
例如,对于上述模型,我相信我应该具有:
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字段将显示为红色,而无效的区号显示为白色(不显示错误),因此看起来有些奇怪.
是否有人有办法纠正这种着色行为,或者如果任何一个字段有错误(在字段上使用正确的着色),我都可以报告错误消息?
先感谢您.
解决方法:
在两个属性上都应用该属性,并且只有一个ValidationMessageFor(任何人),然后将其放置在要显示消息的位置(从帖子中看来,您只需要一条错误消息).
public class Customer
{
//...other fields here
[MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")]
public string AreaCode { get; set; }
[MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")]
public string PhoneNumber { get; set; }
}
视图
@Html.LabelFor(model => model.AreaCode)
@Html.EditorFor(model => model.AreaCode)
@Html.LabelFor(model => model.PhoneNumber)
@Html.EditorFor(model => model.PhoneNumber)
@Html.ValidationMessageFor(model => model.PhoneNumber)