C# 如何创建自定义验证属性?
我正在尝试创建自定义验证属性C# 如何创建自定义验证属性?,c#,data-annotations,C#,Data Annotations,我正在尝试创建自定义验证属性 public class PhoneValidator : ValidationAttribute { public override bool IsValid(object value) { return new RegularExpressionAttribute(@"^[+0]\d+").IsValid(Convert.ToString(value).Trim()); } } 我用这个来 [PhoneValidator
public class PhoneValidator : ValidationAttribute
{
public override bool IsValid(object value)
{
return new RegularExpressionAttribute(@"^[+0]\d+").IsValid(Convert.ToString(value).Trim());
}
}
我用这个来
[PhoneValidator]
public string PhoneNumber { get; private set; }
我是从一个网站上抄的,理论上这应该行得通。但我无法让它工作。以下是以下示例:
PhoneMaskAttribute.cs:
using System;
using System.Globalization;
using System.ComponentModel.DataAnnotations;
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
sealed public class PhoneMaskAttribute : ValidationAttribute
{
// Internal field to hold the mask value.
readonly string _mask;
public string Mask
{
get { return _mask; }
}
public PhoneMaskAttribute(string mask)
{
_mask = mask;
}
public override bool IsValid(object value)
{
var phoneNumber = (String)value;
bool result = true;
if (this.Mask != null)
{
result = MatchesMask(this.Mask, phoneNumber);
}
return result;
}
// Checks if the entered phone number matches the mask.
internal bool MatchesMask(string mask, string phoneNumber)
{
if (mask.Length != phoneNumber.Trim().Length)
{
// Length mismatch.
return false;
}
for (int i = 0; i < mask.Length; i++)
{
if (mask[i] == 'd' && char.IsDigit(phoneNumber[i]) == false)
{
// Digit expected at this position.
return false;
}
if (mask[i] == '-' && phoneNumber[i] != '-')
{
// Spacing character expected at this position.
return false;
}
}
return true;
}
public override string FormatErrorMessage(string name)
{
return String.Format(CultureInfo.CurrentCulture,
ErrorMessageString, name, this.Mask);
}
}
using System.Web.DynamicData;
using System.ComponentModel.DataAnnotations;
[MetadataType(typeof(CustomerMetadata))]
public partial class Customer
{
}
public class CustomerMetadata
{
[PhoneMask("999-999-9999",
ErrorMessage = "{0} value does not match the mask {1}.")]
public object Phone;
}
链接:
从理论上讲,这个函数起作用,但我不想起什么作用?什么不起作用?你是如何调用验证的?我喜欢在键入文本时用红色标记字段,而不是在之后,你还记得我吗?你读过这个吗?我现在正在阅读,谢谢,但这个函数在单击按钮之后或之前起作用?我尝试了Microsoft的示例,但在输入过程中没有显示文本您的问题是“如何创建自定义验证属性?”,对吗?如果您想获得其他问题的答案,如“如何在按键上进行客户端验证”等,请创建单独的问题。本文可以帮助您进行客户端验证: