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

Mar*_*nni 1 c# asp.net-mvc hex colors

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

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

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

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

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

最重要的是,这真的有必要吗?我听说浏览器倾向于忽略错误的十六进制代码为什么 HTML 认为“chucknorris”是一种颜色?

Ked*_*rzu 6

我会说最好验证您的输入,然后中继浏览器的自定义行为。

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

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)
        }

    }
Run Code Online (Sandbox Code Playgroud)

进而:

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

它的工作方式类似于必需属性。看一下RequiredAttribute 的源代码