C#ASP MVC - 仅接受颜色的十六进制值的字段

时间:2017-08-03 18:09:00

标签: c# asp.net-mvc colors hex

我正在制作管理输入面板。

管理员可以选择使用十六进制值创建自定义颜色,例如#0000ff或#008000等。

现在,我在我的模型中使用它:

[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter the color")]
public string Color { get; set; }

如何进行验证,以便管理员只能在此处输入十六进制值?

最重要的是,这真的有必要吗?我听说浏览器倾向于忽略错误的十六进制代码Why does HTML think “chucknorris” is a color?

1 个答案:

答案 0 :(得分:4)

我想说,验证您的输入然后转发浏览器的自定义行为是更好的。

您可以使用以下属性或多或少验证您的字段:

public class HexColorAttribute : ValidationAttribute
{
    private string _errorMessage;

    public HexColorAttribute(string errorMessage)
    {
        _errorMessage = errorMessage
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var colorHexStr = (string)value;
        var valid = Regex.IsMatch(colorHexStr, "#[0-9a-fA-F]{6}");
        if(valid)
        {
              return ValidationResult.Success;
        }
        else
        {
              return new ValidationResult(_errorMessage)
        }

    }

然后:

[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter the color")]
[HexColor("Color has to have format '#123456'")]
public string Color { get; set; }

它的工作方式类似于必需属性。查看RequiredAttribute的source code