在我班上的C#属性

时间:2016-09-23 07:55:42

标签: c# asp.net validation data-annotations

我有这个班级

  • 我想验证EmpType属性,以便只能从枚举EmploymentType中获取值。

  • 然后我想验证EmplyomentNumber,以便它以" E"并包括3个数字

  • 然后薪水属性必须大于或等于0.

    element.outerHTML

3 个答案:

答案 0 :(得分:0)

您无法使用自动实施的属性创建验证。您应该创建一个包含字段的属性:

public class Employment
{
    [Required, StringLength(50, MinimumLength = 3, ErrorMessage ="Name must    be between 3 and 50 characters long.")]
    public string Name { get; set; }

    private string _emplyomentNumber;
    private decimal _salary;


    public EmploymentType EmpType { get; set; }

    public string EmplyomentNumber 
    { 
        get { return _emplyomentNumber; }
        set
        {    
            // validate here!
            _emplyomentNumber = value;
        }
    }

    public decimal Salary 
    { 
        get { return _salary; } 
        set
        {
            // validate here!
            _salary = value;
        }
    }
}

public enum EmploymentType
{
    Full,
    Temporary,
    Internship
}

除非某些枚举值无效,否则您不需要对EmploymentType进行验证。

答案 1 :(得分:0)

要验证枚举,您应该这样做:

    public EmploymentType EmpType 
    {
        get
        {
            return empType;
        }
        set
        {
            if (EmploymentType.IsDefined(typeof(EmploymentType), value))
            {
                empType = value;
            }
            else
            {
                throw new InvalidEnumArgumentException("Error");
            }
        }
    }
    private EmploymentType empType; 

答案 2 :(得分:0)

如果您要验证EmployeeNumber,请使用RegularExpressionAttribute。例如:

[RegularExpression("^[Ee]\d{3}$")]
public string EmployeeNumber{ get; set; }

至于EmploymentType,这里的问题是你如何让用户选择这个值?是通过下拉列表,单选按钮等吗?如果您使用枚举中的值填充下拉列表,我认为您只需要使用EmpType属性装饰[Required]属性。

对于Salary媒体资源,您可以使用[Range(0.1, 100000.0)]。第一个值表示允许的最小值,后者是允许的最大值。这两个值都是必需的。如果没有最大值,则不能仅指定最小值,反之亦然。

有关可用数据注释的更多信息,请查看MSDN Documentation